2015-02-11 4 views
2

Я хотел создать список словарей в python. Обычный способ создания списка работал для меня. То есть mylist = [{1:1},{2:2}]Python - Создание списка словарей

Однако, когда я попытался создать его, используя понимание над range() function, mylist = [a:a for a in range(10)] Я получаю синтаксическую ошибку.

Но, к моему удивлению, если я построю набор таким же образом, он будет работать так, как ожидалось. myset = {a:a for a in range(10)}

Могу ли я узнать, почему это так? Я использую Python3

+0

Похоже, это то, что мы называем хороший вопрос; он явно нуждается в большем количестве средств для недостающих исследовательских усилий и использования неправильных условий. – vaultah

+0

Ваш оператор Python 'myset = {a: a для a в диапазоне (10)}' не создает 'set', а' dict'. У вас есть значения в нем, которые вы можете получить путем индексирования ключами, например, 'myset [5]' возвращает значение '5', в то время как индексирование структуры данных' set' вызывает 'TypeError', потому что _ Объект «set» не поддерживает индексирование «_. Если вы хотите иметь _set-понимание в своем коде, вам нужно написать, проще говоря, 'myset = {a для a в диапазоне (10)}'. – gboffi

ответ

6

Я думаю, что вы хотите что-то вроде этого:

mylist = [{a:a} for a in range(10)] 

Вы забыли о { и }.

Во втором примере, ваш myset является ДИКТ, а не набор:

In [8]: type(myset) 
Out[8]: dict 

В этом примере, { и } обозначают dictionary comprehension, не устанавливается на слух.

3

Вы упускаете создание словаря в список вашего понимания:

mylist = [{a:a} for a in range(10)] 
Смежные вопросы