Skip to main content
 首页 » 编程设计

pythonic 方法来反转字典,其中值是列表

2025年05月04日10jiqing9006

我有一本看起来像这样的字典:

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 .