Python словарный синтаксис, имеющий условие for - PullRequest
2 голосов
/ 09 января 2020

У меня есть этот словарь,

states = {
    'CT': 'Connecticut',
    'CA': 'California',
    'NY': 'New York',
    'NJ': 'New Jersey'
    }

и код здесь ..

state2 = {state: abbrev for abbrev, state in states.items()}

Я пытаюсь понять, что и как работает abbrev for abbrev. Также мне не ясно, что именно state:. Я получаю вторую часть (состояние в states.items ()). Вывод этого дает

{'Connecticut': 'CT', 'California': 'CA', 'New York': 'NY', 'New Jersey': 'NJ'}

, но я не уверен, как это работает .. Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 09 января 2020

То, что здесь происходит, называется словарным пониманием, и его довольно легко прочитать, если вы достаточно их увидели.

state2 = {state: abbrev for abbrev, state in states.items()}

Если вы посмотрите на state: abbrev, вы сразу можете сказать это это обычный объект, назначающий синтаксис. Вы присваиваете значение abbrev ключу состояния. Но что такое состояние и сокращение?

Вам просто нужно взглянуть на следующее утверждение: for abbrev, state in states.items()

Здесь есть для l oop, где сокращение - это ключ, а состояние это элемент, так как states.items () возвращает нам пару ключ и значение.

Похоже, словарь понимает, что создает объект для нас, проходя через объект и назначая ключи и значения по мере его зацикливания.

1 голос
/ 09 января 2020

Словарь пониманий аналогичен спискам. states.items() - это генератор, который будет возвращать ключ и значение для каждого элемента в исходном словаре. Так что, если бы вы объявили пустой словарь, l oop через элементы, а затем щелкнули ключом и значением, у вас был бы новый словарь, который является перевернутой версией оригинала.

state2 = {}
for abbrev, state in states.items():
    state2[state] = abbrev

Чтобы преобразовать из oop структуры

Отразить порядок строк

state2 = {}
    state2[state] = abbrev
for abbrev, state in states.items():

Расширить скобку, чтобы охватить все

state2 = {
    state2[state] = abbrev
for abbrev, state in states.items():
}

исправить назначение, начиная с state2 не назначено

state2 = {
    state: abbrev
for abbrev, state in states.items():
}

Удалите оригинал :

state2 = {
    state: abbrev
for abbrev, state in states.items()
}

Уберите строки

state2 = {state: abbrev for abbrev, state in states.items()}

Использование синтаксиса понимания обычно быстрее и предпочтительным.

...