【问题标题】:Invert a dictionary inplace就地反转字典
【发布时间】:2017-11-15 16:11:21
【问题描述】:

我有一个具有唯一值的字典,我想将其反转(即用值交换键)就地。 有什么办法不使用其他字典吗?

我宁愿只操作字典中的项目而不是使用新字典,这样id(my_dict) 将保持不变。

【问题讨论】:

  • Python 的 dict 是无序的。你应该通过颠倒来解释你的意思。
  • 另外,您认为“就地”应该如何工作?将新字典分配给旧字典变量是否可以,或者您只想操作字典中的项目?
  • 反向我的意思是交换键值,我宁愿只操作字典中的项目而不使用新字典,因此 id(dict) 将保持不变。
  • 如何在没有任何辅助数据结构的情况下就地交换像{1: 2, 2: 1} 这样的字典?
  • 反转后的{1:2, 2:2, 3:2}是什么?

标签: python python-3.x dictionary


【解决方案1】:

如果您尝试交换键和值并且不介意重复值造成键冲突,则可以使用一行代码轻松“反转”字典:

dictionary = dict(map(reversed, dictionary.items()))

如果你更愿意使用字典解析语法,你可以写这行:

dictionary = {value: key for key, value in dictionary.items()}

如果你不想使用字典的items方法,那么避免是相当容易的:

dictionary = {dictionary[key]: key for key in dictionary}

如果您负担得起创建字典的副本,则可以在需要时将其反转:

def reverse_in_place(dictionary):
    reference = dictionary.copy()
    dictionary.clear()
    dictionary.update(map(reversed, reference.items()))

【讨论】:

  • 所有这些都会创建一个违反“不使用其他字典”要求的新字典。我真的不明白如何就地交换键和值。 @NogaKinor 可能应该在回答之前详细说明问题。
  • 我有点喜欢最后一个,虽然我可能只会做reference = list(dictionary.items())
  • @NoctisSkytower 最后一个就像我想要的那样工作。谢谢!
  • @Kinor 感谢您的夸奖!您不妨阅读What should I do when someone answers my question? 以继续鼓励人们回答您的问题。
【解决方案2】:

我猜你想交换字典的键和值?

你可以这样做:

dict_name = dict(zip(dict_name.values(), dict_name.keys()))

【讨论】:

    猜你喜欢
    • 2011-03-25
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多