我有一本看起来像这样的字典:
letters_by_number = {
1: ['a', 'b', 'c', 'd'],
2: ['b', 'd'],
3: ['a', 'c'],
4: ['a', 'd'],
5: ['b', 'c']
}
我想把它反转成这样:
numbers_by_letter = {
'a': [1, 3, 4],
'b': [1, 2, 5],
'c': [1, 3, 5],
'd': [1, 2, 4]
}
我知道我可以通过 letters_by_number
循环遍历 (key, value),循环遍历 value
(这是一个列表),然后添加 (val,键)到字典中的列表。这很麻烦,我觉得必须有一种更“pythonic”的方式来做到这一点。有什么建议吗?
最佳答案
这非常适合 collections.defaultdict
:
>>> from collections import defaultdict
>>> numbers_by_letter = defaultdict(list)
>>> for k, seq in letters_by_number.items():
... for letter in seq:
... numbers_by_letter[letter].append(k)
...
>>> dict(numbers_by_letter)
{'a': [1, 3, 4], 'b': [1, 2, 5], 'c': [1, 3, 5], 'd': [1, 2, 4]}
请注意,您实际上并不需要最终的 dict()
调用(defaultdict
已经为您提供了您可能想要的行为),但我将其包含在此处是因为您的问题的结果是类型 dict
.
关于pythonic 方法来反转字典,其中值是列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58863255/