TypeError:字符串索引必须是整数,而不是 Python 字典中的 str
Posted
技术标签:
【中文标题】TypeError:字符串索引必须是整数,而不是 Python 字典中的 str【英文标题】:TypeError: string indices must be integers, not str on Python Dictionary 【发布时间】:2015-08-04 04:56:55 【问题描述】:我被困住了,我确信这很简单,但我现在只是在绕圈子。下面的代码是一个脚本的 sn-p,它遍历我输入到列表和字典中的一些值,并生成可以输入另一个程序的文本文件。我遇到的问题是,当尝试循环 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,因为我添加了一行来打印偏移到控制台窗口。
为什么字典名称与Direction列表中获取的变量Offset的值相同时无法识别?这段代码来自嵌套的 for 循环,所以我需要能够引用列表和字典来获取值,而不是更手动的替代方法。
【问题讨论】:
【参考方案1】:您在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']
【讨论】:
两个很好的选择,非常感谢;你真的帮了大忙。我确实冒险将字典包装在父字典中,但我没有正确地将它们实现到循环中。以上是关于TypeError:字符串索引必须是整数,而不是 Python 字典中的 str的主要内容,如果未能解决你的问题,请参考以下文章