Задавая вопрос о методе items() в Python

#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) пар) словаря.

https://docs.python.org/3/library/stdtypes.html#dict.items

Это то, что гарантирует порядок предметов. Он явно возвращает повторяющийся (представление, давайте оставим в стороне детали, это то, что вы можете повторить) (key, value) парных кортежей.

Если бы вы только что это сделали for foo in users.items() , то foo был бы этот кортеж. Вы можете распаковать кортеж:

 key, value = ('foo', 'bar')
 

И это то, что вы тоже делаете в цикле, распаковывая кортеж:

 for key, value in users.items():
 

Комментарии:

1. Спасибо тебе, декиз!