首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python3字典get.key - TypeError:'int‘对象不可订阅

python3字典get.key - TypeError:'int‘对象不可订阅
EN

Stack Overflow用户
提问于 2018-01-09 10:31:46
回答 3查看 1.3K关注 0票数 0

我有一个新手知识无法解决的问题。

我正在尝试将一些python-2.x代码(正在工作)复制到python-3.x。现在它给了我一个错误。

下面是代码的一个片段:

代码语言:javascript
复制
def littleUglyDataCollectionInTheSourceCode():
a = {
  'Aabenraa':   [842.86917819535, 25.58264089252],
  'Aalborg':    [706.92644963185, 27.22746146366],
  'Aarhus': [696.60346488317, 25.67540525994],
  'Albertslund':    [632.49007681987, 27.70499807418],
  'Allerød':    [674.10474259426, 27.91964123274],
  'Assens': [697.02257492453, 25.83386400960],
  'Ballerup':   [647.05121493736, 27.72466920284],
  'Billund':    [906.63431520239, 26.23136823557],
  'Bornholm':   [696.05765684503, 28.98396327957],
  'Brøndby':    [644.89390717471, 28.18974127413],
  }
  return a  

以及:

代码语言:javascript
复制
def calcComponent(data):
# Todo: implement inteface to set these values by
# the corresponding 'Kommune'
T = float(data.period)
k = 1.1
rH = 1.0

# import with s/\([^\s-].*?\)\t\([0-9.]*\)$/'\1':'\2',/
myDict = littleUglyDataCollectionInTheSourceCode();
#if data.kommune in myDict:
# https://docs.djangoproject.com/en/1.10/ref/unicode/
key = data.kommune.encode("utf-8")
rd = myDict.get(key.strip(), 0)
laP = float(rd[0]) # average precipitation
midV = float(rd[1]) # Middelværdi Klimagrid
print(("lap " + str(laP)))
print(("mid V" + str(midV)))  

它给出了错误:

代码语言:javascript
复制
line 14, in calcComponent
laP = float(rd[0]) # average precipitation
TypeError: 'int' object is not subscriptable  

我尝试过不同的方法,读了几十篇没有运气的书。作为一个新手,它就像在黑暗中翻滚。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-09 10:48:41

在您的示例中,myDict是一个字典,其中字符串作为键,列表作为值。

代码语言:javascript
复制
key = data.kommune.encode("utf-8")

将是一个字节对象,因此字典中不可能有相应的键值。这在执行自动转换的python2中有效,但在python3中不再起作用,您需要使用正确的类型进行查找。

代码语言:javascript
复制
rd = myDict.get(key.strip(), 0)

将始终返回整数0,这意味着rd[0]无法工作,因为整数是不可索引的,正如错误消息告诉您的那样。

通常,get()调用中的默认值应该与所有其他情况下返回的内容兼容。将0作为默认值返回,其中所有非默认情况返回列表只会导致问题。

票数 1
EN

Stack Overflow用户

发布于 2018-01-09 10:49:00

您使用0作为rd的默认值,而dict中的值是列表,因此如果找不到密钥,则rd[0]rd[1]将失败。相反,使用一个列表或元组作为默认,然后它应该工作。

代码语言:javascript
复制
rd = myDict.get(key.strip(), [0, 0])
票数 1
EN

Stack Overflow用户

发布于 2018-01-11 16:09:12

这就是为什么谷歌搜索TypeError文本并没有给我带来解决方案的原因,因为我的问题是双重的。我忘记了Python3中的集成编码。

我改变了:

代码语言:javascript
复制
key = data.kommune.encode("utf-8")
rd = myDict.get(key.strip(), 0) 

至:

代码语言:javascript
复制
key = data.kommune
rd = myDict.get(key.strip(), [0, 0])  

现在起作用了:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48166183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档