字典的python元组

Jak*_*ake 136 python dictionary tuples

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

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

最终,我希望能够返回1给定'a'2给定'b',也许转换为dict不是最好的方式.

Gre*_*ill 257

尝试:

>>> t = ((1, 'a'),(2, 'b'))
>>> dict((y, x) for x, y in t)
{'a': 1, 'b': 2}
Run Code Online (Sandbox Code Playgroud)

  • +1 Beautiful!,我不得不尝试使用zip`dict(zip(*zip(*t)[:: - 1]))`.这是更慢,更丑陋和使用更多的内存...可能是3倍. (8认同)
  • 也可以使用字典文字而不是字典构造函数:`{y: x for x, y in t}` (2认同)

jte*_*ace 68

一个稍微简单的方法:

>>> t = ((1, 'a'),(2, 'b'))
>>> dict(map(reversed, t))
{'a': 1, 'b': 2}
Run Code Online (Sandbox Code Playgroud)

  • map和dict函数在C中实现,并且比任何python版本都快得多 (8认同)
  • 我喜欢这样明确地说明了“反向”。 (3认同)
  • @maazza:一般来说,性能测试表明(在C实现中至少)`map`比被理解的东西更快,因为被映射的东西是另一个内置函数(如`reversed`); 在大多数其他情况下,情况正好相反.但是配置文件比猜测更好:) (3认同)

aut*_*kos 40

如果你在python 2.7上更简洁:

>>> t = ((1,'a'),(2,'b'))
>>> {y:x for x,y in t}
{'a':1, 'b':2}
Run Code Online (Sandbox Code Playgroud)


小智 9

>>> dict([('hi','goodbye')])
{'hi': 'goodbye'}
Run Code Online (Sandbox Code Playgroud)


psu*_*sun 7

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

d = dict()
for x,y in t:
    if(d.has_key(y)):
        d[y].append(x)
    else:
        d[y] = [x]
Run Code Online (Sandbox Code Playgroud)