PYP*_*YPL 4 python dictionary filter
如何过滤父词典中其他子词典键中存在的所有常用子词典键
d = {
'0': {'key_x': 0, 'key_y': 15, 'key_z': 41}
'1': {'key_x': 5, 'key_y': 22}
'2': {'key_x': 6, 'key_y': 41}
}
result ['key_x', 'key_y']
Run Code Online (Sandbox Code Playgroud)
目前解决方案是
intersect = {}
for k in corner_values.keys():
for j in corner_values[k]:
if j not in intersect:
intersect[j] = 1
else:
intersect[j] += 1
for k in intersect:
if intersect[k] != len(corner_values.keys()):
del intersect[k]
Run Code Online (Sandbox Code Playgroud)
有没有更简单的解决方案呢?
您可以map使用词典set然后reduce使用set.intersection:
>>> from functools import reduce # if you are using Python 3
>>> d = {
... '0': {'key_x': 0, 'key_y': 15, 'key_z': 41},
... '1': {'key_x': 5, 'key_y': 22},
... '2': {'key_x': 6, 'key_y': 41}
... }
>>> reduce(set.intersection, map(set, d.values()))
{'key_x', 'key_y'}
Run Code Online (Sandbox Code Playgroud)
注意:在Python 3中,reduce已被移至functools.
更新:如@ John的回答所示,set.intersection可以处理任意数量的集合,因此reduce甚至不需要.只是set.intersection(*map(set, d.values()))
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |