python3字典get.key-TypeError:';int';对象不可下标

python3字典get.key-TypeError:';int';对象不可下标,python,python-3.x,python-2.7,dictionary,Python,Python 3.x,Python 2.7,Dictionary,我有一个我的新手知识无法解决的问题。 我试图将一些python-2.x代码(正在运行)复制到python-3.x。现在它给了我一个错误。 下面是一段代码: def littleUglyDataCollectionInTheSourceCode(): a = { 'Aabenraa': [842.86917819535, 25.58264089252], 'Aalborg': [706.92644963185, 27.22746146366], 'Aarhus': [696.

我有一个我的新手知识无法解决的问题。
我试图将一些python-2.x代码(正在运行)复制到python-3.x。现在它给了我一个错误。
下面是一段代码:

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  
以及:

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)))  
它给出了错误:

line 14, in calcComponent
laP = float(rd[0]) # average precipitation
TypeError: 'int' object is not subscriptable  

我尝试过不同的方法,读了几十本书,但运气不好。作为新手,这就像在黑暗中翻滚。

在您的示例中,
myDict
是一本以字符串为键、列表为值的词典

key = data.kommune.encode("utf-8")
将是一个字节对象,因此字典中该键永远不会有任何对应的值。这在python2中起作用,在python2中执行了自动转换,但在python3中不再如此,您需要使用正确的类型进行查找

rd = myDict.get(key.strip(), 0)
将始终返回整数
0
,这意味着
rd[0]
无法工作,因为整数是不可索引的,错误消息告诉您


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

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

key = data.kommune.encode("utf-8")
将是一个字节对象,因此字典中该键永远不会有任何对应的值。这在python2中起作用,在python2中执行了自动转换,但在python3中不再如此,您需要使用正确的类型进行查找

rd = myDict.get(key.strip(), 0)
将始终返回整数
0
,这意味着
rd[0]
无法工作,因为整数是不可索引的,错误消息告诉您


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

您使用
0
作为
rd
的默认值,而dict中的值是列表,因此如果找不到键,
rd[0]
rd[1]
将失败。相反,使用列表或元组作为默认值,那么它应该可以工作

rd = myDict.get(key.strip(), [0, 0])

您正在使用
0
作为
rd
的默认值,而dict中的值是列表,因此如果找不到键,
rd[0]
rd[1]
将失败。相反,使用列表或元组作为默认值,那么它应该可以工作

rd = myDict.get(key.strip(), [0, 0])

这就是为什么谷歌搜索TypeError文本并没有让我找到解决方案,因为我的问题是双重的。我忘了Python3中的集成编码。
我改变了:

key = data.kommune.encode("utf-8")
rd = myDict.get(key.strip(), 0) 
致:


现在它可以工作了:-)

这就是为什么谷歌搜索TypeError文本并没有找到解决方案,因为我的问题是双重的。我忘了Python3中的集成编码。
我改变了:

key = data.kommune.encode("utf-8")
rd = myDict.get(key.strip(), 0) 
致:


现在它可以工作了:-)

什么是
数据
或者什么是
?什么是
数据
或者什么是