在嵌套的python dictonary中查找具有多个值的键

时间:2015-10-22 18:17:52

标签: python

我正在尝试索引嵌套字典,如下所示,并尝试查找具有值的键值-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]} }

感谢关于此的任何指示。谢谢!

4 个答案:

答案 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]