我有一个这样的列表字典:
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/