基于键过滤 Python 中的字典列表

Pau*_*oon 2 python dictionary list

我需要过滤字典列表以仅保留具有名为“子项”的键的字典。下面是一个列表示例:

[{u'id': 5650, u'children': [{u'id': 4635}]}, {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}, {u'id': 5649}]
Run Code Online (Sandbox Code Playgroud)

这是我需要获得的:

[{u'id': 5650, u'children': [{u'id': 4635}]}, {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}]
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

dict((k, data[k]) for k in keys if k in data)
Run Code Online (Sandbox Code Playgroud)

而我得到的,这并不好:

[{u'children': [{u'id': 4635}]}, {u'children': [{u'id': 67}, {u'id': 77}]}, {}]
Run Code Online (Sandbox Code Playgroud)

有什么线索吗?提前致谢!

MYG*_*YGz 6

您可以使用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)
Run Code Online (Sandbox Code Playgroud)

输出:

[{u'id': 5650, u'children': [{u'id': 4635}]},
 {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}]
Run Code Online (Sandbox Code Playgroud)

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