对于dict中的in循环给出TypeError:字符串索引必须为整数

时间:2018-07-14 23:57:40

标签: python dictionary for-loop

我有一个字典,里面有11个项目,这是Spyder变量浏览器的碎石镜头:

enter image description here

def buildDF(result_set):
    master_dm = []
    for p in result_set:
        rows = p['reports']
        master_dm.append(rows)
    return(master_dm)

sessions1DF = buildDF(sessions1)
TypeError: string indices must be integers

当我查看session1时,可以看到上面的每个屏幕有11个项目。双击其中一个项目可显示每个项目内的报告:

enter image description here

为什么会出现此错误?如何使用11个报告列表构建一个新列表,这些列表嵌套在result_set中的每个项目下?

2 个答案:

答案 0 :(得分:1)

遍历字典时,尝试调用dict.items()方法:

sessions1 = {10000:'val1',100000:'val2',2000:'val3',3000:'val4',4000:'val5',5000:'val6',6000:'val7',7000:'val8',8000:'val9',9000:'val10',10000:'val11'}
def buildDF(result_set):
    master_dm = []
    for k,v in result_set.items():
        master_dm.append(v)
    return(master_dm)

sessions1DF = buildDF(sessions1)

print(sessions1DF)
# ['val11', 'val2', 'val6', 'val5', 'val3', 'val8', 'val4', 'val9', 'val7', 'val10']

答案 1 :(得分:0)

可以在这里找到类似的问题:Iterating over dictionaries using 'for' loops

据我所知,sessions1是一本包含其他词典的字典,因此要对您想要的项目进行迭代,您需要在字典上使用.items()方法,即:

def buildDF(result_set):
    master_dm = []
    for key, p in result_set.items():
        rows = p['reports']
        master_dm.append(rows)
    return(master_dm)

此刻,您正在做的只是遍历字符串列表。这意味着原始代码中的行p['reports']试图访问当时正在查看的任何键的'reports'元素。由于字符串只能用整数索引,因此无法完成此操作。