python - 如何在defaultdict中有效地进行反向查找?

标签 python performance python-3.x defaultdict

在发布这个问题之前我做了一些搜索,似乎有几种不同的方法可以完成这个任务。

但是目前(使用 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/

相关文章:

mysql - 澄清 InnoDB 引擎中的行级锁和 MySQL 数据库中 MyISAM 引擎中的表级锁的区别

python - 单元测试 pythons telnetlib

python-3.x - matrix.cpp:310: 错误:函数 cv::setSize 中的 (-215) s >= 0

python - 强制变量为整数

python - 在 Tkinter.Tcl() 中使用 Python 函数

java - 在需要唯一元素和按索引访问时设置 vs 列表

Java Netty 负载测试问题

linux - 导入错误 : No module named 'tensorrt'

python - 如何在ipython中获得不同的点

python - 两个 Python 生成器中的公共(public)项目