web-dev-qa-db-ja.com

python dictするタプル

タプルの場合、t = ((1, 'a'),(2, 'b'))dict(t){1: 'a', 2: 'b'}を返します

{'a': 1, 'b': 2}(キーと値を交換)を取得する良い方法はありますか?

最終的に、1が与えられた'a'または2が与えられた'b'を返すことができるようにしたいのですが、おそらくdictに変換するのは最善の方法ではありません。

133
Jake

試してください:

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

少し簡単な方法:

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

python 2.7を使用している場合はさらに簡潔です:

>>> t = ((1,'a'),(2,'b'))
>>> {y:x for x,y in t}
{'a':1, 'b':2}
39
autholykos
>>> 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}]
9
Gunnarsson

同じキーに複数の値がある場合、次のコードはそれらの値をキーに対応するリストに追加します。

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

いくつかの方法があります:

>>> 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}
1
Vlad Bezden