Python TypeError:提取键时字符串索引必须是整数
字典如下Python TypeError:提取键时字符串索引必须是整数,python,Python,字典如下 my = { "1": { "first": 'A,B', "column": "value", "test":"test", "output": "Out1", "second": "Cost", "Out2": &
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()}
我试过的代码如下
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:字符串索引必须是整数。代码有什么问题
这两种方法都可以奏效:
print({k: {"first": v["first"], "test": v["test"]} for k, v in my.items()})
print({k: {i: v[i] for i in ['first','test']} for k, v in my.items()})
这是意料之中的事
print({x: {i: y[i] for i in ['first', 'test']} for x, y in my.items()})
输出
{'1': {'first': 'A,B', 'test': 'test'}, '2': {'first': 'None', 'test': 'test'}}
让我们使用其中一个子词典来了解这里出了什么问题
"1": {
"first": 'A,B',
"column": "value",
"test":"test",
"output": "Out1",
"second": "Cost",
"Out2": "Rev"
},
代码中的变量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]
你的预期产量是多少?那一行太聪明了,我不喜欢。这一点都不容易理解。它也被破坏了,显然你可以应用它,这将比在整个dict上迭代稍微快一点。