Удалите последнее значение из первого ключа

#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()