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的主要内容,如果未能解决你的问题,请参考以下文章

弹性搜索 | TypeError:字符串索引必须是整数

TypeError:列表索引必须是整数,而不是浮点数

TypeError:列表索引必须是整数或切片,而不是列表

TypeError:列表索引必须是整数或切片,而不是浮点数

TypeError:列表索引必须是整数或切片,而不是 str

Python -> TypeError:列表索引必须是整数,而不是 str