It’s a common operation to filter elements in list, dictionary and set.
For loop
data = [-1, 2, 3, -4, 5] |
This is the least pythonic way.
List/Dictionary/Set Comprehension
Can use python’s list/dictionary/set comprehensions
List
First create a dummy data, using random library
from random import randint |
res_lc = [x for x in data if x >= 0] |
Dictionary
Create a dictionary data:
data_dict = {"std_"+str(i):randint(0,100) for i in range(20)} |
res_dict = {k:v for k,v in data_dict.items() if v >= 60} |
Set
res_set = {v for v in data_set if v >= 0} |
Filter function
Use the built-in filter function, use lambda for filtering criteria
List
res = list(filter(lambda x: x>=0, data)) |
Filter will return a generator, need to use list to create a list
Dict
A very lengthy way
res_dict = {k:data_dict[k] for k in filter(lambda k: data_dict[k]>=60, data_dict)} |
A much better solution
res_dict = dict(filter(lambda x: x[1]>=60, data_res.items())) |