TypeError: string indices must be integers, not str on Python Dictionary
TypeError: string indices must be integers, not str on Python Dictionary
我被困住了,我确信这是很简单的事情,但我现在只是在兜圈子。下面的代码是一个脚本片段,它迭代了我输入到列表和字典中的一些值,并生成了我可以输入另一个程序的文本文件。我遇到的问题是在尝试循环 Direction 列表并将相关字典中的相应值打印到文件时出现以下错误:
TypeError: 字符串索引必须是整数,而不是 str
Direction = ('E', 'NE')
E = {
'InitialHeading': 0,
'InitialX': 22.480,
'InitialY': 0.000,
'ActiveCurrent': '10y_Current_W'}
NE = {
'InitialHeading': 45,
'InitialX': 15.896,
'InitialY': 15.896,
'ActiveCurrent': '10y_Current_SW'}
casenumber = 0
for Offset in Direction:
# CREATE INDIVIDUAL TEXT FILES
casenumber = casenumber + 1
filename = 'Case%.3d.txt' % casenumber
f = open(filename, 'w')
print >>f, 'InitialHeading: ', Offset['InitialHeading']
print >>f, 'InitialX: ', Offset['InitialX']
print >>f, 'InitialY: ', Offset['InitialY']
print >>f, 'ActiveCurrent: ', Offset['ActiveCurrent']
f.close()
如果我将 Offset 替换为字典名称,则该行内容如下:
print >>f, 'InitialHeading: ', E['InitialHeading']
那么输出正是我想要的,我知道 Offset 等于 E 当我 运行文件,因为我添加了一行以将 Offset 的值打印到控制台 window.
当字典名称与从 Direction 获得的变量 Offset 的值相同时,为什么它不能识别字典名称列表?这段代码来自嵌套的 for 循环,所以我需要能够参考列表和字典来获取值,而不是更手动的替代方法。
您在 Offset
变量上使用订阅语法,它是一个 字符串 ,取自 Direction
。
不能直接使用Offset
中的字符串作为同名变量的占位符。相反,*存储字典:
E = {
'InitialHeading': 0,
'InitialX': 22.480,
'InitialY': 0.000,
'ActiveCurrent': '10y_Current_W'}
NE = {
'InitialHeading': 45,
'InitialX': 15.896,
'InitialY': 15.896,
'ActiveCurrent': '10y_Current_SW'}
Direction = (E, NE)
或者更好的是,使用另一个字典来包装方向:
Direction = {
'E': {
'InitialHeading': 0,
'InitialX': 22.480,
'InitialY': 0.000,
'ActiveCurrent': '10y_Current_W'},
'NE': {
'InitialHeading': 45,
'InitialX': 15.896,
'InitialY': 15.896,
'ActiveCurrent': '10y_Current_SW'}
}
现在您可以遍历 that 字典并获得方向的字符串名称和与之关联的设置:
for direction, settings in Directions.items():
# CREATE INDIVIDUAL TEXT FILES
casenumber = casenumber + 1
filename = 'Case%.3d.txt' % casenumber
with open(filename, 'w') as f:
print >>f, 'InitialHeading: ', settings['InitialHeading']
print >>f, 'InitialX: ', settings['InitialX']
print >>f, 'InitialY: ', settings['InitialY']
print >>f, 'ActiveCurrent: ', settings['ActiveCurrent']
我被困住了,我确信这是很简单的事情,但我现在只是在兜圈子。下面的代码是一个脚本片段,它迭代了我输入到列表和字典中的一些值,并生成了我可以输入另一个程序的文本文件。我遇到的问题是在尝试循环 Direction 列表并将相关字典中的相应值打印到文件时出现以下错误:
TypeError: 字符串索引必须是整数,而不是 str
Direction = ('E', 'NE')
E = {
'InitialHeading': 0,
'InitialX': 22.480,
'InitialY': 0.000,
'ActiveCurrent': '10y_Current_W'}
NE = {
'InitialHeading': 45,
'InitialX': 15.896,
'InitialY': 15.896,
'ActiveCurrent': '10y_Current_SW'}
casenumber = 0
for Offset in Direction:
# CREATE INDIVIDUAL TEXT FILES
casenumber = casenumber + 1
filename = 'Case%.3d.txt' % casenumber
f = open(filename, 'w')
print >>f, 'InitialHeading: ', Offset['InitialHeading']
print >>f, 'InitialX: ', Offset['InitialX']
print >>f, 'InitialY: ', Offset['InitialY']
print >>f, 'ActiveCurrent: ', Offset['ActiveCurrent']
f.close()
如果我将 Offset 替换为字典名称,则该行内容如下:
print >>f, 'InitialHeading: ', E['InitialHeading']
那么输出正是我想要的,我知道 Offset 等于 E 当我 运行文件,因为我添加了一行以将 Offset 的值打印到控制台 window.
当字典名称与从 Direction 获得的变量 Offset 的值相同时,为什么它不能识别字典名称列表?这段代码来自嵌套的 for 循环,所以我需要能够参考列表和字典来获取值,而不是更手动的替代方法。
您在 Offset
变量上使用订阅语法,它是一个 字符串 ,取自 Direction
。
不能直接使用Offset
中的字符串作为同名变量的占位符。相反,*存储字典:
E = {
'InitialHeading': 0,
'InitialX': 22.480,
'InitialY': 0.000,
'ActiveCurrent': '10y_Current_W'}
NE = {
'InitialHeading': 45,
'InitialX': 15.896,
'InitialY': 15.896,
'ActiveCurrent': '10y_Current_SW'}
Direction = (E, NE)
或者更好的是,使用另一个字典来包装方向:
Direction = {
'E': {
'InitialHeading': 0,
'InitialX': 22.480,
'InitialY': 0.000,
'ActiveCurrent': '10y_Current_W'},
'NE': {
'InitialHeading': 45,
'InitialX': 15.896,
'InitialY': 15.896,
'ActiveCurrent': '10y_Current_SW'}
}
现在您可以遍历 that 字典并获得方向的字符串名称和与之关联的设置:
for direction, settings in Directions.items():
# CREATE INDIVIDUAL TEXT FILES
casenumber = casenumber + 1
filename = 'Case%.3d.txt' % casenumber
with open(filename, 'w') as f:
print >>f, 'InitialHeading: ', settings['InitialHeading']
print >>f, 'InitialX: ', settings['InitialX']
print >>f, 'InitialY: ', settings['InitialY']
print >>f, 'ActiveCurrent: ', settings['ActiveCurrent']