Преобразование словаря для списка? [дубликат]

Возможный дубликат:
Как я могу преобразовать словарь Python в список кортежей?

Я пытаюсь преобразовать словарь Python в список Python для выполнения некоторых вычислений.

#My dictionary
dict = {}
dict['Capital']="London"
dict['Food']="Fish&Chips"
dict['2012']="Olympics"

#lists
temp = []
dictList = []

#My attempt:
for key, value in dict.iteritems():
    aKey = key
    aValue = value
    temp.append(aKey)
    temp.append(aValue)
    dictList.append(temp) 
    aKey = ""
    aValue = ""

Это - моя попытка его..., но я не могу удаться что случилось?

179
задан martineau 29 June 2019 в 08:20
поделиться

6 ответов

Ваша проблема в том, что у вас есть ключ и значение в кавычках превращая их в строки, т.е. вы устанавливаете aKey так, чтобы он содержал строку «ключ» , а не значение переменной ключ . Кроме того, вы не очищаете список temp , поэтому вы добавляете в него каждый раз, вместо того, чтобы просто содержать в нем два элемента.

Чтобы исправить свой код, попробуйте что-то вроде:

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

Вам не нужно копировать переменные цикла , ключ и значение в другую переменную перед их использованием, поэтому я их исключил. Точно так же вам не нужно использовать append для создания списка, вы можете просто указать его в квадратных скобках, как показано выше.

135
ответ дан 23 November 2019 в 06:14
поделиться
dict.items()

Does the trick.

396
ответ дан 23 November 2019 в 06:14
поделиться

Вам следует использовать dict.items () .

Вот решение вашей проблемы с одним лайнером:

[(k,v) for k,v in dict.items()]

и результат:

[('Food', 'Fish&Chips'), ('2012', 'Olympics'), ('Capital', 'London')]

или вы можете выполните

l=[]
[l.extend([k,v]) for k,v in dict.items()]

для:

['Food', 'Fish&Chips', '2012', 'Olympics', 'Capital', 'London']
53
ответ дан 23 November 2019 в 06:14
поделиться
 >>> a = {'foo': 'bar', 'baz': 'quux', 'hello': 'world'}
 >>> list(reduce(lambda x, y: x + y, a.items()))
 ['foo', 'bar', 'baz', 'quux', 'hello', 'world']

Объяснение: a.items () возвращает список кортежей. При сложении двух кортежей получается один кортеж, содержащий все элементы. Таким образом, сокращение создает один кортеж, содержащий все ключи и значения, а затем список (...) составляет из него список.

33
ответ дан 23 November 2019 в 06:14
поделиться

Probably you just want this:

dictList = dict.items()

Your approach has two problems. For one you use key and value in quotes, which are strings with the letters "key" and "value", not related to the variables of that names. Also you keep adding elements to the "temporary" list and never get rid of old elements that are already in it from previous iterations. Make sure you have a new and empty temp list in each iteration and use the key and value variables:

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

Also note that this could be written shorter without the temporary variables (and in Python 3 with items() instead of iteritems()):

for key, value in dict.items():
    dictList.append([key, value])
21
ответ дан 23 November 2019 в 06:14
поделиться

Если вы создаете словарь только для того, чтобы составить список кортежей, поскольку создание таких слов, как вы, может быть проблемой, вы можете изучить использование zip ()

Это особенно полезно если у вас один заголовок и несколько строк. Например, если я предполагаю, что вам нужна статистика Олимпийских игр для стран:

headers = ['Capital', 'Food', 'Year']
countries = [
    ['London', 'Fish & Chips', '2012'],
    ['Beijing', 'Noodles', '2008'],
]

for olympics in countries:
    print zip(headers, olympics)

дает

[('Capital', 'London'), ('Food', 'Fish & Chips'), ('Year', '2012')]
[('Capital', 'Beijing'), ('Food', 'Noodles'), ('Year', '2008')]

Не знаю, является ли это конечной целью, и я не по теме, но это может быть что-то, что нужно иметь в виду.

5
ответ дан 23 November 2019 в 06:14
поделиться
Другие вопросы по тегам:

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