Итерация внутри словарного выражения
Я недавно начал изучать Python, поэтому я уверен, что многие вещи, которые я не знаю, могут быть довольно простыми для решения. Однако, просматривая множество вопросов, я не смог найти ответ на этот вопрос.
Можно ли перебрать переменную в словарном выражении?
В поисках ответа я нашел это:
{ _key : _value(_key) for _key in _container }
Теперь я знаю, что это способ зацикливания внутри понимания, но для того, чтобы это сработало, мне нужно иметь возможность итерировать значение для каждого "_key" в "_container".
Для очень простого примера:
alphabet = 'abcdefghijklmnopqrstuvwxyz'
x = 1
alpha_numbers = {char : x for char in alphabet}
Я хотел бы, чтобы 'x' было 'x += 1' для каждого 'char' в контейнере 'alphabet'. Но каждый раз, когда я пытаюсь выполнить итерацию, в словаре понимается ошибка "Неверный синтаксис".
Итак, возможно ли это сделать? Или есть лучший способ сделать это?
Заранее спасибо.
2 ответа
Ты можешь использовать dict
а также enumerate
прохождение x
в качестве начального значения:
alphabet = 'abcdefghijklmnopqrstuvwxyz'
dct = dict(enumerate(alpahbet, x)) # start=x i.e 1
Демо-версия:
In [43]: print dict(enumerate(alphabet,1))
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i', 10: 'j', 11: 'k', 12: 'l', 13: 'm', 14: 'n', 15: 'o', 16: 'p', 17: 'q', 18: 'r', 19: 's', 20: 't', 21: 'u', 22: 'v', 23: 'w', 24: 'x', 25: 'y', 26: 'z'}
Или используя перечисление с помощью dict comp:
dct = {i:k for i,k in enumerate(alphabet,x)}
Чтобы получить буквы в качестве ключей, измените порядок i и k:
dct = {k:i for i,k in enumerate(alphabet,x)}
Или используя itertools.count
с dict
а также zip
:
from itertools import count
dct = dict(zip(alphabet, count(x)))
Или же range
, len
а также zip
:
dct = dict(zip(alphabet, range(x, len(alphabet)+x)))
В этом случае, в частности, рассмотрим использование индексов:{alphabet[i]:i+1 for i in range(len(alphabet))}
,
Тем не менее, вы не можете обновлять переменные внутри списка, набора или словаря. Если вы хотите сделать это, используйте обычный цикл for или while dictionary[key] = value
добавить в этом цикле.