我需要过滤一个字典列表,只保留字典,这些字典有一个名为" 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}]}, {}]
有任何线索吗? 提前谢谢!
答案 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 = ...
)。这循环遍历列表中的每个字典并检查是否存在“子”键。如果有,则将其添加到列表中。如果没有,则跳过它。