python - 使用单个 "for"循环或使用 "itertools"库反转字典

标签 python dictionary python-itertools

我有一个这样的列表字典:

my_dict = {
    'key_a': [1, 3, 4],
    'key_b': [0, 2],
}

我想像这样创建一个反向查找字典:

reverse_dict = {
    0: 'key_b',
    1: 'key_a',
    2: 'key_b',
    3: 'key_a',
    4: 'key_a',
}

我有一个解决方案的工作版本:

reverse_dict = {elem: key for key, a_list in my_dict.items() for elem in a_list}

但想知道是否有人可以提供不使用双 for 的替代答案,因为我觉得它失去了可读性。所以我更喜欢使用单个 for 循环或使用类似于 itertools 或函数式编程中的函数

最佳答案

您使用字典理解 的解决方案是实现它的 Pythonic 方式。

但是,根据您的要求,作为使用单个 for 循环的替代方案,这里是使用 zip() 的功能性方案, itertools.repeat() , 和 itertools.chain.from_iterable() ,但我怀疑它在可读性方面是否比您的解决方案更好:

my_dict = {
    'key_a': [1, 3, 4],
    'key_b': [0, 2],
}

from itertools import chain, repeat

new_dict = dict(chain.from_iterable(zip(v, repeat(k)) for k, v in my_dict.items()))

new_dict 的位置:

{0: 'key_b', 1: 'key_a', 2: 'key_b', 3: 'key_a', 4: 'key_a'} 

关于python - 使用单个 "for"循环或使用 "itertools"库反转字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49019551/

相关文章:

python - 嵌套字典理解以避免空值

c++ - 允许指定单独的比较器和排序仿函数的关联容器

python - 输出中的 __dict__ 类 **kwargs、*args

python从列表中返回连续整数列表

python - 快速从句子中提取术语

python - 如何查找文件中的特定行?

python - 这个将 'string' 视为 'list' 的回文代码如何工作?

python - 在 Python 中使用 fping 获取 ping 时间

python - 为什么 Python 的 itertools.cycle 需要创建可迭代对象的副本?

python - 如何有效地在迭代器上迭代 "n-wise"