【问题标题】:Reverse elements in dictionary [duplicate]字典中的反向元素[重复]
【发布时间】:2012-05-24 01:03:52
【问题描述】:

可能重复:
Python reverse / inverse a mapping

假设我有以下内容。

D = {'a':1,'b':2,'c':3}

我将如何反转每个元素以便我得到

inverseD = {1:'a',2:'b',3'c'}

【问题讨论】:

  • 无关紧要,但我仍然不理解那些对用户在某些主题上的合法困惑投反对票的人,即使他/她的堆栈寿命只有一个月。
  • 同意。对新手问题的反对意见至少应附有对反对意见的解释和/或关于如何改进问题的建议。
  • 抱歉重复了。我问错了问题。

标签: python dictionary tuples


【解决方案1】:

使用 dict 理解(Python 2.7+3.0+):

D = {'a':1,'b':2,'c':3}
inverse = {v: k for k, v in D.items()}
print(inverse)
# {1: 'a', 2: 'b', 3: 'c'}

【讨论】:

  • 嘿,完全一样的答案。我必须通过验证码检查,这就是我迟到的原因。我会删除我的答案。 +1。
【解决方案2】:

如果你有 Python2.7+,你可以使用 mata 的答案,否则使用 mhawke 的答案。

只有在源 dict 的所有值都是唯一且可散列的情况下,这样的反转 dict 才能正常工作

如果这些值是可散列的,但不是唯一的,您可以使用包含值列表的字典来代替

【讨论】:

    【解决方案3】:

    对于 Python 2.6 及更早版本(无字典理解):

    d = {'a':1,'b':2,'c':3}
    inverse_dict = dict((v,k) for k,v in d.items())
    

    这假设 dict d 的值是可散列的,例如,它不适用于这个字典:

    >>> d={'l':[],'d':{},'t':()}
    >>> inverse_dict = dict((v,k) for k,v in d.items())
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'list'
    

    如果原始dict的不是唯一的,你也会遇到问题,例如

    >>> d={'a': 1, 'c': 3, 'b': 2, 'd': 1}
    >>> dict((v,k) for k,v in d.items())
    {1: 'd', 2: 'b', 3: 'c'}
    

    【讨论】:

    • 正是我需要的。谢谢。在手册中找不到。
    猜你喜欢
    • 2017-09-12
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多