我正在尝试索引嵌套字典,如下所示,并尝试查找具有值的键值-i.e具有多个值的键的字典。当我通过A索引时,我需要键1和2作为结果。是否有一种有效的方法可以在一个包含许多键的庞大字典(最外层)上执行此操作。
以下示例:
A = { 0:{0:[1], 1:[2]}, 1:{0:[2],2:[3,4]}, 2:{3:[4],7:[4,7]}, 3:{4:[45]} }
感谢关于此的任何指示。谢谢!
答案 0 :(得分:2)
In [1]: A = { 0:{0:[1], 1:[2]}, 1:{0:[2],2:[3,4]}, 2:{3:[4],7:[4,7]}, 3:{4:[45]} }
In [2]: [ k for (k,v) in A.items()
if any(len(subv) > 1 for subv in v.values())]
Out[2]: [1, 2]
答案 1 :(得分:0)
您可以使用itertools.ifilter
和生成器表达式。
import itertools
results = itertools.ifilter(lambda x: x != None,(v if any(len(A[v][vk]) > 1 for vk in A[v]) else None for v in A))
print list(results)
[1, 2]
答案 2 :(得分:0)
像这样:
A = { 0:{0:[1], 1:[2]}, 1:{0:[2],2:[3,4]}, 2:{3:[4],7:[4,7]}, 3:{4:[45]} }
def print_dict(values_index):
for value in A[values_index]:
print A[values_index][value]
print_dict(0) #You can change 0 with any other key to find the values
输出:
[1]
[2]
如果您需要将它们放入列表而不是print
使用list_name.append(...)
注意:我编写的代码使得即使是经验不足的人也尽可能读取它,但我仍然认为如果你只处理int值并且每个关键差异与前一个一个一起,这是最好的方法之一< / p>
答案 3 :(得分:0)
A = { 0:{0:[1], 1:[2]}, 1:{0:[2],2:[3,4]}, 2:{3:[4],7:[4,7]}, 3:{4:[45]} }
[k for (k,v) in filter(lambda kv: len(filter(lambda kv2: len(kv2[1])>1, kv[1].iteritems()))>0, A.iteritems())]
输出:
[1, 2]