Python tuple 到 dict

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

有没有一个好的方法来获得 {'a': 1, 'b': 2}(密钥和瓦尔斯交换) ?

最终,我希望能够返回 1给予 'a'2给予 'b',也许转换成一个字典不是最好的方式。

272241 次浏览

试试:

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

一个稍微简单一点的方法:

>>> t = ((1, 'a'),(2, 'b'))
>>> dict(map(reversed, t))
{'a': 1, 'b': 2}
>>> 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}]

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

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

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

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

这里有几种方法:

>>> 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}