запутался в переменных, созданных в словаре - PullRequest
0 голосов
/ 24 октября 2018
# -*- coding: utf-8 -*-
states = {
    'oregon': 'OR',
    'florida': 'FL',
    'california': 'CA',
    'new york': 'NY',
    'michigan': 'MI'
}

cities = {
    'CA': 'san francisco',
    'MI': 'detroit',
    'FL': 'jacksonville'
}

cities['NY'] = 'new york'
cities['OR'] = 'portland'


for state, abbrev in states.items(): # add two variables
    print "%s is abbreviated %s" % (state, abbrev)

print '-' * 10    
for abbrev, city in cities.items():
    print "%s has the city %s" % (abbrev, city)

print '-' * 10
for state, abbrev in states.items():  # this is what i'm confusing about
    print "%s state is abbreviated %s and has city %s" % (state, abbrev, cities[abbrev])

Я просто хочу узнать в сомнительной строке, есть только две введенные переменные (state & abbrev), почему может быть указано три переменные (state & abbrev & city [abbrev])?

Я предполагаю, что «аббревиатура» используется дважды, один раз в государствах dict и один раз в городах dict.Значит, города [аббревиатура] означает возвращать второе значение каждой пары вещей?Кто-нибудь может подтвердить, если мои предположения верны?

Если это так, почему я получаю ключевую ошибку, когда меняю города [аббревиатура] на города [штат]?Код ошибки: KeyError: «Калифорния».Он должен возвращать первое значение каждой пары.

Я не понимаю, как это работает, не могли бы вы помочь мне найти выход?

1 Ответ

0 голосов
/ 24 октября 2018

В вашем случае states.items() выполняет итерацию пар ключ-значение, например ('oregon', 'OR').state будет 'oregon' и abbrev будет 'OR'.cities[abbrev] находит значение 'OR' в словаре cities.В случае 'OR', то есть 'portland'.

Если вы попытались указать значение, отсутствующее в ключах словаря, например, banana, то Python выдаст KeyError, поскольку значениеbanana не является ключом в этом словаре.

Чтобы обеспечить наличие ключа в словаре, вы можете использовать оператор in.

for state, abbrev in states.items():
    # if the value of abbrev (e.g. 'OR') is a value in the cities dictionary
    # we know that there is a city in this state. Print it.
    if abbrev in cities:
        print "%s state is abbreviated %s and has city %s" % (state, abbrev, cities[abbrev])
    else:
        print "%s is abbreviated %s" % (state, abbrev)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...