我是 Python 新手,我不确定使用 dict of dict 是个好主意,但这是我的问题。 我有一本字典的字典,我想按内部字典的键进行过滤:
a = { 'key1' : {'id1' :[0,1,2] , 'id2' :[0,1,2], 'id3' :[4,5,6]},
'key2' : {'id3' :[0,1,2] , 'id4' :[0,1,2]},
'key3' : {'id3' :[0,1,2] , 'id1' :[4,5,6]}
}
例如,我想按“id1”过滤:
result = { 'key1' : {'id1' :[0,1,2] },
'key3' : {'id1' :[4,5,6]}
}
我尝试了过滤方法,得到了所有的值:
r = [('key1' ,{'id1' :[0,1,2] , 'id2' :[0,1,2], 'id3' :[4,5,6]}),
('key3' , {'id3' :[0,1,2] , 'id1' :[4,5,6]})
]
此外,过滤器方法返回一个列表,我想将格式保留为字典。
提前致谢
最佳答案
试试这个:
>>> { k: v['id1'] for k,v in a.items() if 'id1' in v }
{'key3': [4, 5, 6], 'key1': [0, 1, 2]}
对于 Python 2.x,您可能更喜欢使用 iteritems()
而不是 items()
,并且您仍然需要一个相当新的 python(我认为是 2.7)对于字典理解:对于较老的 python 使用:
dict((k, v['id1']) for k,v in a.iteritems() if 'id1' in v )
如果你想提取多个值,那么我认为你最好完整地写出循环:
def query(data, wanted):
result = {}
for k, v in data.items():
v2 = { k2:v[k2] for k2 in wanted if k2 in v }
if v2:
result[k] = v2
return result
给予:
>>> query(a, ('id1', 'id2'))
{'key3': {'id1': [4, 5, 6]}, 'key1': {'id2': [0, 1, 2], 'id1': [0, 1, 2]}}
关于python - 过滤字典的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5992666/