TypeError:/:'dict_values'和'int'的不支持的操作数类型

时间:2017-04-27 16:24:58

标签: python-3.x numpy

当我进行数据分析练习时,此代码在Python3中没有按预期运行。

typeerror是“TypeError:/ dict_values'和'int'”不支持的操作数类型。

我该如何解决?

Option Explicit
Sub Extract5Digits()
    Dim R As Range, C As Range
    Dim RE As Object, MC As Object, M As Object
    Dim I As Long

Set R = Selection
Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = True
    .Pattern = "\b\d{5}\b"
    For Each C In R
        If .test(C.Text) = True Then
            I = 0
            Set MC = .Execute(C.Text)
            For Each M In MC
                I = I + 1
                C.Offset(0, I) = M
            Next M
        End If
    Next C
End With
End Sub

4 个答案:

答案 0 :(得分:14)

在完成本课程时,此代码给我带来了一些意想不到的麻烦,但我通过进行以下更改来实现它:

import numpy as np

total_minutes = list(total_minutes_by_account.values())
print ('Mean:', np.mean(total_minutes))
print ('Standard Deviation:', np.std(total_minutes))
print ('Minimum:', np.min(total_minutes))
print ('Maximum:', np.max(total_minutes))

答案 1 :(得分:6)

希望这会有所帮助:

该类是用Python 2编写的,其中Dict.values()返回一个列表,但是在Python 3中更新了它以返回字典视图,如下所述: https://docs.python.org/3/library/stdtypes.html#dict-views

这是一个潜在有用的更改,因为视图会在字典内容更新时更新,但它们的行为不像List,而是numpy的meanstd,{ {1}}和min都以列表作为参数。

答案 2 :(得分:1)

total_minutes = total_minutes_by_account.values()

变量total_minutes的类型为dict_values。 要将其转换为列表,您需要将其包装在list函数中,如下所示:

total_minutes = list(total_minutes_by_account.values())

答案 3 :(得分:0)

@hpaulj在(not being able to do numpy operations on values on a dictionary

给出了一个很好的例子

在下面找到他的答案摘要。这对我帮助很大。

In [1618]: dd = {'a':[1,2,3], 'b':[4,5,6]}
In [1619]: dd
Out[1619]: {'a': [1, 2, 3], 'b': [4, 5, 6]}
In [1620]: dd.values()
Out[1620]: dict_values([[1, 2, 3], [4, 5, 6]])
In [1621]: np.mean(dd.values())
... 
TypeError: unsupported operand type(s) for /: 'dict_values' and 'int'

解决方案:将dict_values转换为list:

In [1623]: list(dd.values())
Out[1623]: [[1, 2, 3], [4, 5, 6]]
In [1624]: np.mean(list(dd.values()))
Out[1624]: 3.5

在Py3中,range和dict.keys()需要额外的触摸。

======

np.mean首先尝试将输入转换为数组,但value()不是我们想要的。它生成一个包含整个对象的单项对象数组。

In [1626]: np.array(dd.values())
Out[1626]: array(dict_values([[1, 2, 3], [4, 5, 6]]), dtype=object)
In [1627]: _.shape
Out[1627]: ()
In [1628]: np.array(list(dd.values()))
Out[1628]: 
array([[1, 2, 3],
       [4, 5, 6]])