如果键的值为true,则过滤字典

时间:2017-04-23 20:00:26

标签: python dictionary

我是Python的新手(第1天)。我有一个数据集,通过布尔'poi'键指示某人是否是感兴趣的人。我能够使用以下内容过滤数据:

filtered = []
for n in enron_data:
    if enron_data[n]['poi']: filtered.append(enron_data[n]);
print(len(filtered))

我尝试了一段时间来使用过滤器中内置的pythons但却无法使用。用内置过滤器做什么是干净的方法?

示例数据:{'METTS MARK': {... 'poi': False,}, ...}

4 个答案:

答案 0 :(得分:5)

您可以使用列表推导来迭代字典,然后为True评估value['poi']的值创建一个新列表。

filtered = [v for k, v in enron_data.items() if v['poi']]

事实上,你根本就没有使用这些键,所以你可以这样做:

filtered = [v for v in enron_data.values() if v['poi']]

或者使用过滤器(类似于@AbidHasan):

filtered = filter(lambda x: x['poi'], enron_data.values())

答案 1 :(得分:1)

您也可以使用filter功能。

new_list = filter(lambda x: a[x]['POI'], a)

答案 2 :(得分:0)

另一个filter函数

new_list = filter(your_dict.get, your_dict)

比在lambda函数中使用filter便宜。

答案 3 :(得分:0)

d = {1:11, 2:22, 3:33}

# filter by value
d3 = {}

for key,value in d.items():
    if value in [22,33]:
        d3.update({key:value})
print(d3)