首页 > 解决方案 > TypeError:提取键时字符串索引必须是整数

问题描述

字典如下

my = {
  "1": {
    "first": 'A,B',
    "column": "value",
    "test":"test",
    "output": "Out1",
    "second": "Cost",
    "Out2": "Rev"
  },
  "2": {
    "first": 'None',
    "column": "value",
    "test":"test",
    "output": "Out2",
    "Out2": "Rev"
  }
}

我试过的代码如下

{k:{l:l[i] for i in ['first','test'] for l,m in v.items()} for k,v in my.items()}

我试图只提取两个['first','test']键,也有一个['first','test']不存在的变化。

我正进入(状态

TypeError:字符串索引必须是整数。代码有什么问题

标签: python

解决方案


让我们使用其中一个子词典来了解这里出了什么问题。

  "1": {
    "first": 'A,B',
    "column": "value",
    "test":"test",
    "output": "Out1",
    "second": "Cost",
    "Out2": "Rev"
  },
{k:{l:l[i] for i in ['first','test'] for l,m in v.items()} for k,v in my.items()}

代码中的变量k将是键"1",值v将是子字典。

然后,当你这样做时"l""l"实际上是字典键,它们是字符串,例如"first", "test"。然后,当您尝试做时l:l[i],您实际上是在尝试对字符串进行索引,"first"并且您没有使用整数值来索引字符串,而是传递了一个字符串值 - 所以您正在做"first"["first"].

这就是为什么您会看到TypeError消息“字符串索引必须是整数”。

如果你想要一个聪明的单线,这应该工作

{
   key: {sub_key:sub_dict[sub_key] for sub_key in ["first", "test"]}
   for key, sub_dict in my.items()
}

就个人而言,我会写

selected_dict = dict()
for key, value in my.items():
    for sub_key in ["first", "test"]:
        selected_dict[sub_key] = value[sub_key]

推荐阅读