Питон: как преобразовать словарь в массив subscriptable?

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

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

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

4 ответов


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

если вы хотите получить список объектов, вы должны преобразовать его в список, передающий результат в


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

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


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


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