python元组到字典


149

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

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

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

Answers:


277

尝试:

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

8
+1美丽!,我不得不尝试使用zip dict(zip(*zip(*t)[::-1]))。这是较慢,较丑的方式,并且会使用更多的内存。可能是3倍。
kevpie 2011年

@kevpie关于Python的妙处在于,有一百种方法来表达如何做某事,每种方法都与下一种有趣。
bjd2385

太好了,如果您拥有的是三元组,则可以执行以下操作:dict((x, y) for x, y, z in t)dict((x, (y, z)) for x, y, z in t)将第二个和第三个值作为元组获取。
guival,

非常快速,全面和简单。完美的答案。
gies0r

73

稍微简单一些的方法:

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

1
是什么使速度更快?
2013年

9
map和dict函数在C语言中实现,并且比任何python版本都快得多
jterrace 2013年

1
我喜欢这样reverse明确列出。
Frerich Raabe 2013年

4
@maazza:通常,性能测试表明(至少在C实现中)map当被映射的事物是另一个内置函数(如reversed)时,其理解速度要快于理解;在大多数其他情况下,情况恰恰相反。但是,比进行猜测要好得多:)
Karl Knechtel 2014年

43

如果您使用的是python 2.7,则更加简洁:

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

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

我不知道这个如何回答OP的问题
Luca Amerio

4

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

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

2

以下是几种方法:

>>> 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}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.