在发布这个问题之前我做了一些搜索,似乎有几种不同的方法可以完成这个任务。
但是目前(使用 Python 3)根据 defaultdict
中的特定值搜索键的最有效方法是什么,如下所示:
defaultdict(list,
{'a': [[2, 3], [1, 2]],
'b': [[5, 6]],
'w': [[]],
'x': [[9]],
'z': [[5, 6]]})
我想找到所有值为 6 的键。一种解决方案是编写一个嵌套的 for 循环来迭代键、defaultdict 的值,但我确信有更好的方法来实现这一点。
最佳答案
您可以使用 itertools
模块中的 chain.from_iterable
,如下例所示:
from itertools import chain
a = defaultdict(list,
{'a': [[2, 3], [1, 2]],
'b': [[5, 6]],
'w': [[]],
'x': [[9]],
'z': [[5, 6]]})
keys = [k for k, v in a.items() if 6 in chain.from_iterable(v)]
print(keys)
或者,以更紧凑的方式,您可以定义一个在 defaultdict 的值中进行查找的函数:
def get_keys(a, key=6):
return [k for k, v in a.items() if key in chain.from_iterable(v)]
keys = get_keys(a)
print(keys)
输出:
['b', 'z']
关于python - 如何在defaultdict中有效地进行反向查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44532374/