кортеж Python для диктовки - PullRequest
       6

кортеж Python для диктовки

130 голосов
/ 24 сентября 2010

Для кортежа t = ((1, 'a'),(2, 'b')) dict(t) возвращает {1: 'a', 2: 'b'}

Есть ли хороший способ получить {'a': 1, 'b': 2} (смена ключей и значений)?

В конечном счете, я хочучтобы иметь возможность вернуть 1 с учетом 'a' или 2 с учетом 'b', возможно, преобразование в диктовку - не лучший способ.

Ответы [ 6 ]

249 голосов
/ 24 сентября 2010

Попробуйте:

>>> t = ((1, 'a'),(2, 'b'))
>>> dict((y, x) for x, y in t)
{'a': 1, 'b': 2}
68 голосов
/ 06 октября 2011

Немного более простой метод:

>>> t = ((1, 'a'),(2, 'b'))
>>> dict(map(reversed, t))
{'a': 1, 'b': 2}
38 голосов
/ 03 марта 2013

Еще более лаконично, если вы используете Python 2.7:

>>> t = ((1,'a'),(2,'b'))
>>> {y:x for x,y in t}
{'a':1, 'b':2}
7 голосов
/ 14 февраля 2013
>>> 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}]
2 голосов
/ 10 апреля 2016

Если существует несколько значений для одного и того же ключа, следующий код добавит эти значения в список, соответствующий их ключу,

d = dict()
for x,y in t:
    if(d.has_key(y)):
        d[y].append(x)
    else:
        d[y] = [x]
1 голос
/ 02 января 2018

Вот несколько способов сделать это:

>>> 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...