Для кортежа t = ((1, 'a'),(2, 'b')) dict(t) возвращает {1: 'a', 2: 'b'}
t = ((1, 'a'),(2, 'b'))
dict(t)
{1: 'a', 2: 'b'}
Есть ли хороший способ получить {'a': 1, 'b': 2} (смена ключей и значений)?
{'a': 1, 'b': 2}
В конечном счете, я хочучтобы иметь возможность вернуть 1 с учетом 'a' или 2 с учетом 'b', возможно, преобразование в диктовку - не лучший способ.
1
'a'
2
'b'
Попробуйте:
>>> 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}
Еще более лаконично, если вы используете Python 2.7:
>>> t = ((1,'a'),(2,'b')) >>> {y:x for x,y in 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}]
Если существует несколько значений для одного и того же ключа, следующий код добавит эти значения в список, соответствующий их ключу,
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}