【问题标题】:python tuple to dictpython元组到dict
【发布时间】:2011-04-16 13:26:51
【问题描述】:

对于元组,t = ((1, 'a'),(2, 'b')) dict(t) 返回{1: 'a', 2: 'b'}

有没有获得{'a': 1, 'b': 2}(交换键和值)的好方法?

最终,我希望能够在给定'a'2 给定'b' 的情况下返回1,也许转换为字典不是最好的方法。

【问题讨论】:

    标签: python dictionary tuples


    【解决方案1】:

    试试:

    >>> t = ((1, 'a'),(2, 'b'))
    >>> dict((y, x) for x, y in t)
    {'a': 1, 'b': 2}
    

    【讨论】:

    • +1 漂亮!,我不得不尝试使用 zip dict(zip(*zip(*t)[::-1]))。这更慢,更丑陋并且使用更多内存..可能是 3 倍。
    • @kevpie Python 的奇妙之处在于,有一百种方法可以表达如何做某事,每一种都和下一种一样有趣。
    • 太好了,如果你有一个三元组,你可以这样做:dict((x, y) for x, y, z in t)dict((x, (y, z)) for x, y, z in t) 将第二个和第三个值作为一个元组。
    • 也可以使用 dict 文字而不是 dict 构造函数:{y: x for x, y in t}
    【解决方案2】:

    稍微简单一点的方法:

    >>> t = ((1, 'a'),(2, 'b'))
    >>> dict(map(reversed, t))
    {'a': 1, 'b': 2}
    

    【讨论】:

    • 是什么让它更快?
    • map和dict函数是用C实现的,比任何python版本都快
    • 我喜欢这个 reverse 明确拼写出来。
    • @maazza:一般来说,性能测试表明(至少在 C 实现中)map 在被映射的东西是另一个内置函数时比理解更快(例如 reversed );在大多数其他情况下,情况正好相反。但分析总比猜测好:)
    【解决方案3】:
    >>> dict([('hi','goodbye')])
    {'hi': 'goodbye'}
    

    或者:

    >>> [ dict([i]) for i in (('CSCO', 21.14), ('CSCO', 21.14), ('CSCO', 21.14), ('CSCO', 21.14)) ]
    [{'CSCO': 21.14}, {'CSCO': 21.14}, {'CSCO': 21.14}, {'CSCO': 21.14}]
    

    【讨论】:

      【解决方案4】:

      如果你使用的是 python 2.7,那就更简洁了:

      >>> t = ((1,'a'),(2,'b'))
      >>> {y:x for x,y in t}
      {'a':1, 'b':2}
      

      【讨论】:

        【解决方案5】:

        如果同一个键有多个值,下面的代码会将这些值附加到与其键对应的列表中,

        d = dict()
        for x,y in t:
            if(d.has_key(y)):
                d[y].append(x)
            else:
                d[y] = [x]
        

        【讨论】:

          【解决方案6】:

          这里有几种方法:

          >>> t = ((1, 'a'), (2, 'b'))
          
          >>> # using reversed function
          >>> dict(reversed(i) for i in t)
          {'a': 1, 'b': 2}
          
          >>> # using slice operator
          >>> dict(i[::-1] for i in t)
          {'a': 1, 'b': 2}
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-03-23
            • 2012-03-21
            • 2019-03-29
            • 2010-11-20
            • 1970-01-01
            • 2023-01-20
            • 1970-01-01
            相关资源
            最近更新 更多