Подтвердить что ты не робот

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

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

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

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

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

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

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

Ответ 1

>>> 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')]

Это не в том порядке, в каком вы хотите, но у диктов нет какого-либо конкретного порядка. 1 Сортируйте это или организуйте это как необходимо.

Смотрите: items(), iteritems()


В Python 3.x вы не использовали бы iteritems (которых больше не существует), а вместо этого использовали бы items, которые теперь возвращают "представление" в словарные элементы. См. Документ " Что нового для Python 3.0" и новую документацию по представлениям.

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

Ответ 2

так как никто больше не сделал, я добавлю 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')]

Ответ 3

Вы можете использовать списки.

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

вы получите [ ('a', 1), ('b', 2), ('c', 3) ] и

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

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

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

Ответ 4

Создать список именованных кортежей

Часто может быть очень удобно использовать namedtuple. Например, у вас есть словарь "имя" в качестве ключей и "оценка" в качестве значений, таких как:

d = {'John':5, 'Alex':10, 'Richard': 7}

Вы можете перечислить элементы в виде кортежей, отсортировать, если хотите, и получить имя и оценку, скажем, игрока с наибольшим количеством очков (индекс = 0), очень Pythonically, как это:

>>> player = best[0]

>>> player.name
        'Alex'
>>> player.score
         10

Как это сделать:

список в случайном порядке или сохраняя порядок коллекций .OrderedDict :

import collections
Player = collections.namedtuple('Player', 'name score')
players = list(Player(*item) for item in d.items())

в порядке, отсортированном по значению ("оценка"):

import collections
Player = collections.namedtuple('Player', 'score name')

отсортированы с наименьшим количеством баллов:

worst = sorted(Player(v,k) for (k,v) in d.items())

отсортированы с наибольшим количеством баллов:

best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True)

Ответ 5

Вы хотите использовать методы 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')]
>>> 

Ответ 6

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

и

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

Ответ 7

>>> 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')]

Ответ 8

В словах keys() и values() словаря и zip.

zip вернет список кортежей, который действует как упорядоченный словарь.

Demo:

>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> zip(d.keys(), d.values())
[('a', 1), ('c', 3), ('b', 2)]
>>> zip(d.values(), d.keys())
[(1, 'a'), (3, 'c'), (2, 'b')]

Ответ 9

d = {'John':5, 'Alex':10, 'Richard': 7}
list = []
for i in d:
   k = (i,d[i])
   list.append(k)

print list

Ответ 10

Для использования Python3.x

for key, value in dict.items():
    temp = [key,value]
    dictlist.append(temp)

Для Python 2.7 используйте

for key, value in dict.iteritems():
    temp = [key,value]
    dictlist.append(temp)

Спасибо