我有一本看起来像这样的字典:
letters_by_number = {
1: ['a', 'b', 'c', 'd'],
2: ['b', 'd'],
3: ['a', 'c'],
4: ['a', 'd'],
5: ['b', 'c']
}
Run Code Online (Sandbox Code Playgroud)
我想将其反转为如下所示:
numbers_by_letter = {
'a': [1, 3, 4],
'b': [1, 2, 5],
'c': [1, 3, 5],
'd': [1, 2, 4]
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过遍历(键,值)letters_by_number,遍历value(这是一个列表)并将(val,key)添加到字典中的列表来做到这一点。这很麻烦,我觉得必须有一种更“ 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]}
Run Code Online (Sandbox Code Playgroud)
请注意,您实际上并不需要最终dict()调用(a defaultdict会给您可能想要的行为),但是我在此处包括了它,因为问题的结果是type dict。