【问题标题】:For in loop over dict gives TypeError: string indices must be integersFor in loop over dict 给出 TypeError: string indices must be integers
【发布时间】:2018-07-14 23:57:40
【问题描述】:

我有一个包含 11 个项目的字典,这是来自 Spyder 变量资源管理器的截图:

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 个项目。双击其中一个项目会显示每个项目内的报告:

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

【问题讨论】:

    标签: python dictionary for-loop


    【解决方案1】:

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

    据我所知,session1 是一个包含其他字典的字典,因此要按照您的意愿迭代项目,您需要在字典上使用 .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' 元素。这是无法做到的,因为字符串只能用整数索引 - 因此会出现错误。

    【讨论】:

      【解决方案2】:

      在遍历字典时尝试调用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']
      

      【讨论】:

        猜你喜欢
        • 2013-09-26
        • 2017-10-31
        • 1970-01-01
        • 2020-01-20
        • 2012-03-03
        • 2023-01-12
        • 1970-01-01
        • 2020-10-18
        • 2022-09-23
        相关资源
        最近更新 更多