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
, но это не будет в порядке.