python反向字典

新手上路,请多包涵

给定一本字典:

  d = {'name': 'Luke', 'age': 43, 'friend': 'Joe'}

我正在尝试构建一个将更改它的函数,以便新字典将是:

 d = {'Luke': 'name', 43: 'age', 'Joe':'friend'}

换句话说,键将成为值,而值将成为键。字典的 ID 也不会改变。

我试过这段代码:

 dict(map(reversed, d.items()))

我正在使用 python 3.x 任何帮助将不胜感激。

原文由 Guy L 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 618
2 个回答

如果您想在不更改其 id 的情况下反转字典,则需要构建一个临时字典,清除旧字典并更新它。以下是如何使用字典理解来做到这一点。

 d = {'name': 'Luke', 'age': 43, 'friend': 'Joe'}
print(d, id(d))

# Invert d
t = {v: k for k, v in d.items()}

# Copy t to d
d.clear()
d.update(t)
# Remove t
del t
print(d, id(d))

输出

{'name': 'Luke', 'age': 43, 'friend': 'Joe'} 3072452564
{'Luke': 'name', 43: 'age', 'Joe': 'friend'} 3072452564

使用 Python 3.6 进行测试,它保留了普通字典的顺序。 del t 并不是绝对必要的,但如果你不需要它也可以。当然,如果您在函数内执行此 t 无论如何,一旦超出范围,就会收集垃圾。

执行此操作时需要小心:所有值都必须是不可变对象,任何重复的值都会被破坏。

此外,虽然它是完全合法的,但有些人认为为字典键使用混合类型是不好的风格。如果你想创建字典项目的排序列表,如果键是混合类型,你将无法在 Python 3 中轻松地做到这一点。您不能对混合类型的键进行排序,因为 Python 3 不允许您比较混合类型的对象。

原文由 PM 2Ring 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用字典理解,这是你的倒置字典:

 rev_dict = {v: k for k, v in d.items()}

如果您对 Python 中的有序词典感兴趣(因为内置词典本质上是无序的),我鼓励您查看 — collections.OrderedDict

原文由 blacksite 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题