Python: как преобразовать словарь в индексируемый массив?

Я знаю, как преобразовать словарь в список в Python, но каким-то образом, когда я пытаюсь получить, скажем, сумму результирующего списка, я получаю сообщение об ошибке 'dict_values' object is not subscriptable. Также я планирую суммировать только несколько пунктов в списке.

dict = {A:1, B:2, C:3, D:4}
arr = dict.values()
the_sum = sum(arr[1:3])

При ближайшем рассмотрении я заметил, что, когда полученный список распечатывается, он всегда выдает dict_values(......) в качестве вывода, который я не могу удалить. Как мне обойти это?

Ответ 1

В python-3.X dict.values не возвращает list подобный тому, как он работает в python-2.X. В python-3.x он возвращает объект dict-value который является объектом, подобным множеству, и использует хеш-таблицу для хранения своих элементов. Эта функция, в дополнение к поддержке большинства set атрибутов, очень оптимизирована для некоторых операций, таких как проверка принадлежности (использование in операторе). И из-за этого он не поддерживает индексацию.

Если вы хотите получить объект списка, вам нужно преобразовать его в список, передав результат в функцию list().

the_values = dict.values()
SUM = sum(list(the_values)[1:10])

Ответ 2

Назначая dict.values ​​(), чтобы список u не преобразовывал его в список u, он просто сохраняет его как dict_values ​​(может быть объектом). Для преобразования write list=list(dict.values()). Теперь даже при печати list u получат элементы списка, а не dict_values(......).

И как упоминалось ранее, не используйте встроенные имена python в качестве имен переменных, это может вызвать конфликты во время выполнения и путаницы при чтении кода.

Ответ 3

Да, это выглядело как список более старых вопросов Python, задаваемых здесь. Но, как сказал @Kasramvd, предполагая, что вы используете python 3.X, dict.values является объектом просмотра словаря. (Кроме того, вы определенно придумали этот пример поспешно, поскольку у вас есть четыре словаря, но нужно 10 элементов списка, что является избыточным.)

Ответ 4

@mgilson прав. Словарь по своему внутреннему характеру не упорядочен.

Тем не менее вы можете сделать это:

alpha = {"A":1,"B":2,"C":3,"D":4,"E":5}   # dictionary
my_list = []
for key,value in alpha.items() :
    my_list.append(value)

Вы можете получить доступ к своим "значениям" из my_list, но это не будет в порядке.