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

标签 python python-3.x

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

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/

相关文章:

python-3.x - 无法使用python 3.7安装robot-framework-ride

python - 尝试根据文本查找链接时的 Selenium 错误

Python:从 FTP 服务器检索多个文件

python - 如何在Python中并行化嵌套for循环?

python - 当我从IDLE运行GASP时,为什么它不起作用?

python - 如何在随机点云上拟合点网格

python - 凯撒移位密码

python - Python多重处理启动进程,但只有一个处于事件状态

python-2.7 - 升级到ubuntu-16.10后pip无法使用

python - cv2.VideoCapture.read() 在 time.sleep() 之后获取旧帧