根据键过滤Python中的词典列表

时间:2017-01-06 17:45:05

标签: python list dictionary

我需要过滤一个字典列表,只保留字典,这些字典有一个名为" children"的密钥。以下是列表的示例:

[{u'id': 5650, u'children': [{u'id': 4635}]}, {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}, {u'id': 5649}]

以下是我需要获得的内容:

[{u'id': 5650, u'children': [{u'id': 4635}]}, {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}]

以下是我的尝试:

dict((k, data[k]) for k in keys if k in data)

我获得了什么,这是不好的:

[{u'children': [{u'id': 4635}]}, {u'children': [{u'id': 67}, {u'id': 77}]}, {}]

有任何线索吗? 提前谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用filter()功能。它需要2个参数filter(function, iterable)。只考虑函数返回的那些值。

a=[{u'id': 5650, u'children': [{u'id': 4635}]},
   {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]},
   {u'id': 5649}]

print filter(lambda x: 'children' in x, a)

输出:

[{u'id': 5650, u'children': [{u'id': 4635}]},
 {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}]

filter(function, iterable)相当于[item for item in iterable if function(item)]

答案 1 :(得分:3)

这是怎么回事?

Geocoder.configure(
  :timeout => 30
)

<强>输出

dict_list = [{u'id': 5650, u'children': [{u'id': 4635}]}, {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}, {u'id': 5649}]

filtered = [d for d in dict_list if 'children' in d]

print(filtered)

答案 2 :(得分:1)

l = [{u'id': 5650, u'children': [{u'id': 4635}]}, {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}, {u'id': 5649}]
d = [k for k in l if 'children' in k]
print (d)

输出:

[{u'id': 5650, u'children': [{u'id': 4635}]}, {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}]

重要的一行是第二行(d = ...)。这循环遍历列表中的每个字典并检查是否存在“子”键。如果有,则将其添加到列表中。如果没有,则跳过它。