#python
Вопрос:
Я хочу удалить последнее значение из первого ключа для словаря, вот что у меня есть:
{'attr1': ['Creativity','Control (1)','Passing (7)','Work Rate','Work Rate','Flair','Concentration'],
'attr2':['Creativity','Control (1)','Passing (7)','Work Rate','Work Rate','Flair']}
Что я пробовал:
for k,v in next(iter(player_data.items())):
v.pop()
возвращает ошибку:
Ошибка значения: слишком много значений для распаковки (ожидается 2)
Я думаю, потому что это перестает быть словарем?
Поэтому я тоже пытался:
for k,v in player_data.items():
v.pop()
Однако при этом удаляется последний элемент для обоих ключей.
Комментарии:
1.
player_data['attr1'].pop()
?2. @YevhenKuzmovych Это работает, спасибо!
3. @YevhenKuzmovych Получение названного ключа
attr1
не обязательно приравнивается к получению первого ключа, как того требует операция, еслиattr1
только не гарантируется, что он всегда будет первым ключом на входе операции.4. Диктанты @YevhenKuzmovych были заказаны в Python уже некоторое время, начиная с версии 3.6. Код OP также показывает его/ее намерение, не называя ключ, а вместо этого повторяя ключи и получая первый
next
.5. @blhsing Технически да, но в большинстве случаев полагаться на это-плохая практика. Так что это зависит от потребностей операции, но мне показалось, что под «первым» (- ами)он имел в виду того, кто здесь первый, так
'attr1'
что . (Ы)Он может использовать ваш ответ или мой, в зависимости от потребностей.
Ответ №1:
next(iter(player_data.items()))
уже возвращает первую пару ключ-значение, поэтому вам не следует повторять ее с for
помощью цикла при первой попытке. Ваша вторая попытка сработает, если вы просто безоговорочно выйдете из цикла после того, как откроете список.
Однако, поскольку вам нужно иметь дело только с первым значением, вы можете получить его непосредственно с values()
помощью метода и сразу же вставить его:
next(iter(player_data.values())).pop()