#python
Вопрос:
Вот немного кода:
users = {
'aeinstein': {
'first': 'albert',
'last': 'einstein',
'location': 'princeton',
},
'mcurie': {
'first': 'marie',
'last': 'curie',
'location': 'paris',
},
}
for username, user_info in users.items():
print(f"nUsername: {username}")
full_name = f"{user_info['first']} {user_info['last']}"
location = user_info['location']
print(f"tFull name: {full_name.title()}")
print(f"tLocation: {location.title()}")
При доступе к различным ключам в словаре объявляются некоторые переменные. При объявлении переменных, связанных с ключами и значениями словаря, предполагается ли, что первая объявленная переменная всегда является ключом? Обратите внимание на username
переменную, в словаре нет ничего, что идентифицировало бы ее как ключ. А также с user_info
тем , что ничто не идентифицирует это как ценность. Например, что, если я объявлю user_info
первое, а затем второе username
?
Комментарии:
1. Ты имеешь в виду, если бы ты это сделал
for user_info, username in users.items()
? Тогдаuser_info
был бы ключ (например'aeinstein'
) иusername
значение (т. е. словарь).items()
неважно, каким переменным вы назначаете, он возвращает итератор(key, value)
пар в соответствии с документами .2. Да
items
возвращает кортежи(key, value)
, поэтому, когда вы их распакуете, ключ будет первым, а значение-вторым. Или, в более общем плане, когда вы распаковываете кортеж, переменные распаковываются в зависимости от порядка в кортеже.3. Не рассчитывайте на порядок словаря, это не то, для чего он предназначен. Используйте
[]
для доступа к нужным вам элементам, напримерusers['aeinstein']['first']
4. Вау, это был быстрый ответ. Вы все удивительные люди. Спасибо, что помогли мне разобраться в этом.
Ответ №1:
items()
Возвращает новое представление элементов ((key, value)
пар) словаря.
Это то, что гарантирует порядок предметов. Он явно возвращает повторяющийся (представление, давайте оставим в стороне детали, это то, что вы можете повторить) (key, value)
парных кортежей.
Если бы вы только что это сделали for foo in users.items()
, то foo
был бы этот кортеж. Вы можете распаковать кортеж:
key, value = ('foo', 'bar')
И это то, что вы тоже делаете в цикле, распаковывая кортеж:
for key, value in users.items():
Комментарии:
1. Спасибо тебе, декиз!