Итерация внутри словарного выражения

Я недавно начал изучать 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 добавить в этом цикле.

Другие вопросы по тегам