我知道如何将字典转换为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(......)
作为输出,我无法删除。我该如何解决这个问题?
答案 0 :(得分:21)
在python-3.X dict.values
中,它不会像在python-2.X中那样返回list
。在python-3.x中,它返回一个dict-value
对象,它是一个类似于集合的对象,并使用哈希表来存储其项目。此功能除了支持大多数set
属性外,还针对某些操作进行了优化,例如成员资格检查(使用in
运算符)。因此,它不支持索引。
如果要获取列表对象,则需要将结果传递给list()
函数将其转换为列表。
the_values = dict.values()
SUM = sum(list(the_values)[1:10])
答案 1 :(得分:3)
通过将dict.values()分配给列表,你没有将它转换为列表你只是将它存储为dict_values(可能是一个对象)。要转换写list=list(dict.values())
。现在,即使在打印list
时,您也会获得列表元素,而不是dict_values(......)
。
如前所述,在使用python内置名称作为变量名之前,可能会在执行时遇到冲突并在阅读代码时产生混淆。
答案 2 :(得分:1)
是的,它确实看起来像这里提到的旧Python问题列表。但正如@Kasramvd所说,假设您使用的是python 3.X,dict.values
是一个字典视图对象。
(另外,你肯定匆匆想出了这个例子,因为你有四个字典条目,但想要10个列表项,这是多余的。)
答案 3 :(得分:0)
@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
访问您的“值”,但它不会有序。