Создание словаря со списком в Python
Мне нравится синтаксис понимания списка Python.
Можно ли его использовать и для создания словарей? Например, путем итерации
по парам ключей и значений:
mydict = {(k,v) for (k,v) in blah blah blah}
Вы ищете фразу "понимание слова" - это на самом деле:
mydict = {k:v for k,v in iterable}
Это почти верно, за исключением бла-бла-бла:
mydict = {(k,v) for (k,v) in blah blah blah}
^^^^^^--invalid syntax
Предполагая, что blah blah blah
- это итерация из двух кортежей - вы так близки. Давайте создадим несколько «бла», как это:
blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]
Синтаксис понимания Dict:
Теперь синтаксис здесь является частью отображения. То, что делает это понимание dict
вместо set
понимания (что и соответствует вашему псевдокоду), это двоеточие, :
, как показано ниже:
mydict = {k: v for k, v in blahs}
И мы видим, что это сработало и должно сохранить порядок вставки, как в Python 3.7:
>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah2': 'blah', 'blah3': 'blah'}
В Python 2 и до 3.6 заказ не гарантирован:
>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}
Добавление фильтра:
Все понимания содержат компонент отображения и компонент фильтрации, которые вы можете предоставить с произвольными выражениями.
Таким образом, вы можете добавить часть фильтра в конец:
>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}
Здесь мы просто проверяем, делится ли последний символ на 2, чтобы отфильтровать данные перед отображением ключей и значений.