繁体   English   中英

类型错误:对象没有属性“__getItem__”

[英]TypeError: object has no attribute '__getItem__'

我看过另一篇有这个标题的帖子,但我很困惑,因为我的值已经是整数了。 我希望脚本查看每个键的值(具有多个值的数组),通过将数组设为列表来对数组进行排序,然后遍历排序和转换后的列表的值,从第二个中减去第一个,然后从第三个中减去第二个,依此类推,将差异存储在列表中。

b = {"a":[5,2,1],"b":[8,4,3]}

for k in b.values():
    eVals = []
    #print listVals
    x = 0
    for i in sorted(k):
        dif = i[x+1] - i[x]
        print dif
        eVals.append(dif)
        x +=1

这是错误:

Traceback (most recent call last):
  File "C:\Python27\ArcGIS10.2\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 323, in RunScript
    debugger.run(codeObject, __main__.__dict__, start_stepping=0)
  File "C:\Python27\ArcGIS10.2\Lib\site-packages\pythonwin\pywin\debugger\__init__.py", line 60, in run
    _GetCurrentDebugger().run(cmd, globals,locals, start_stepping)
  File "C:\Python27\ArcGIS10.2\Lib\site-packages\pythonwin\pywin\debugger\debugger.py", line 654, in run
    exec cmd in globals, locals
  File "N:\Python\test_dict.py", line 1, in <module>
    b = {"a":[5,2,1],"b":[8,4,3]}
TypeError: 'int' object has no attribute '__getitem__'
>>> b = {"a":[5,2,1],"b":[8,4,3]}
>>> for key, value in b.iteritems():
...     value.sort()
...     value[:] = [cur-prev for cur, prev in zip(value, [0] + value[:-1])] 
...     
>>> b
{'a': [1, 1, 3], 'b': [3, 1, 4]}

如果你有 numpy 方便可用,你可以在一个单行理解中做到这一点:

>>> import numpy as np
>>> b = {"a":[5,2,1],"b":[8,4,3]}
>>> {k: np.diff([0] + sorted(v)) for k, v in b.iteritems()}
{'a': array([1, 1, 3]), 'b': array([3, 1, 4])}

您尝试在int上使用__getitem__

这是一个可能的解决方案

inp  = {"a":[5,2,1],"b":[8,4,3]}

out = {}
for key, lis in inp.iteritems():
    difLis = []
    sLis = sorted(lis)
    for i, _ in enumerate(sLis[:-1]):
        dif = sLis[i+1] - sLis[i]
        print "%d - %d = %d" % (sLis[i+1], sLis[i], dif)
        difLis.append(dif)
    out[key] = difLis
print out # {'a': [1, 3], 'b': [1, 4]}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM