Словарь Понимание в Python 3
Я обнаружил следующее сообщение о переполнении стека о Python2.7
dict в Python2.7
и Python 3+
: создайте словарь с пониманием списка в Python, заявив, что я могу применять такие понимания в словаре, как это:
d = {key: value for (key, value) in sequence}
Я попробовал его на Python 3. Однако он вызывает исключение.
d = {'a':1, 'b':2, 'c':3, 'd':4}
{key : value for (key, value) in d}
{key : value for key, value in d}
Обе версии повышают значение ValueError
говоря, что ValueError: need more than 1 value to unpack
.
Что является самым простым/самым прямым способом сделать понимание словаря в Python3?
Ответы
Ответ 1
Зацикливание по словарю дает только ключи. Используйте d.items()
для циклического d.items()
двумя ключами и значениями:
{key: value for key, value in d.items()}
Исключение ValueError
вы видите, не является проблемой понимания dict, и не ограничивается Python 3; вы бы видеть ту же самую проблему в Python 2 или с регулярными for
цикла:
>>> d = {'a':1, 'b':2, 'c':3, 'd':4}
>>> for key, value in d:
... print key, value
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
потому что каждая итерация дает только один элемент.
Без преобразования {k: v for k, v in d.items()}
является просто многословным и дорогостоящим d.copy()
; используйте понимание dict только тогда, когда вы делаете немного больше с ключами или значениями или используете условия или более сложную конструкцию цикла.
Ответ 2
Хорошо сказано выше - вы можете удалить элементы в Python3, если вы сделаете так:
{ключ: d [ключ] для ключа в d}
d = {'a':1, 'b':2, 'c':3, 'd':4}
z = {x: d[x] for x in d}
z
>>>{'a': 1, 'b': 2, 'c': 3, 'd': 4}
и это обеспечивает возможность использования условий, а также
y = {x: d[x] for x in d if d[x] > 1}
y
>>>{'b': 2, 'c': 3, 'd': 4}
Наслаждайтесь!
Ответ 3
Понимание словаря означает создание элементов в словаре с помощью некоторой логики. Сейчас
x = {p: p * p для p в диапазоне (10)}
печать (х)
y = {q: q * 3 для q в диапазоне (5,15), если q% 2! = 0}
печать (у)