Как я могу преобразовать словарь в список кортежей?

Если у меня есть словарь как:

{ 'a': 1, 'b': 2, 'c': 3 }

Как я могу преобразовать его в это?

[ ('a', 1), ('b', 2), ('c', 3) ]

И как я могу преобразовать его в это?

[ (1, 'a'), (2, 'b'), (3, 'c') ]
197
задан martineau 29 June 2019 в 08:19
поделиться

7 ответов

>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> d.items()
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v, k) for k, v in d.iteritems()]
[(1, 'a'), (3, 'c'), (2, 'b')]

Это не находится в порядке, который Вы хотите, но dicts не имеют никакого определенного порядка anyway.1, Сортируют его или организуют его по мере необходимости.

См.: объекты (), iteritems ()


В Python 3.x Вы не использовали бы iteritems (который больше не существует), но вместо этого используйте items, который теперь возвращает "представление" в объекты словаря. Посмотрите Новые функции и возможности документ для Python 3.0 и новой документации относительно представлений.

1: Сохранение порядка вставки для dicts было добавлено в Python 3.7

338
ответ дан Graham 23 November 2019 в 05:15
поделиться

так как никто больше не сделал, я добавлю py3k версии:

>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> list(d.items())
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v, k) for k, v in d.items()]
[(1, 'a'), (3, 'c'), (2, 'b')]
49
ответ дан SilentGhost 23 November 2019 в 05:15
поделиться

Можно использовать понимания списка.

[(k,v) for k,v in a.iteritems()] 

получит Вас [ ('a', 1), ('b', 2), ('c', 3) ] и

[(v,k) for k,v in a.iteritems()] 

другой пример.

Читайте больше о пониманиях списка, если Вам нравится, очень интересно, что можно сделать с ними.

18
ответ дан Michael Ohlrogge 23 November 2019 в 05:15
поделиться
[(k,v) for (k,v) in d.iteritems()]

и

[(v,k) for (k,v) in d.iteritems()]
6
ответ дан Robert Rossney 23 November 2019 в 05:15
поделиться

То, что Вы хотите, dict items() и iteritems() методы. items возвращает список (ключ, значение) кортежи. Так как кортежи неизменны, они не могут быть инвертированы. Таким образом необходимо выполнить итерации объектов и создать новые кортежи для получения обратного (значение, ключ) кортежи. Для повторения, iteritems предпочтительно, так как это использует генератор для создания (ключ, значение) кортежи вместо того, чтобы иметь необходимость сохранить весь список в памяти.

Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = { 'a': 1, 'b': 2, 'c': 3 }
>>> a.items()
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v,k) for (k,v) in a.iteritems()]
[(1, 'a'), (3, 'c'), (2, 'b')]
>>> 
7
ответ дан Barry Wark 23 November 2019 в 05:15
поделиться
>>> a={ 'a': 1, 'b': 2, 'c': 3 }

>>> [(x,a[x]) for x in a.keys() ]
[('a', 1), ('c', 3), ('b', 2)]

>>> [(a[x],x) for x in a.keys() ]
[(1, 'a'), (3, 'c'), (2, 'b')]
4
ответ дан ismail 23 November 2019 в 05:15
поделиться

Более простой был бы

list(dictionary.items())  # list of (key, value) tuples
list(zip(dictionary.values(), dictionary.keys()))  # list of (key, value) tuples

, второй не так более прост, но да.

1
ответ дан 23 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: