python - 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:字符串索引必须是整数。代码有什么问题
解决方案
让我们使用其中一个子词典来了解这里出了什么问题。
"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]
推荐阅读
- c# - 在所有测试用例中都需要 chrome 驱动器实例 selenium c#
- bash - 如何使用 Ammonite Script 运行“set”或“source”
- javascript - 是否可以在 solr 集合 url 中传递用户/传递
- angular - 为什么 FormControlName 如果在 FormArray 中的不同 FormGroup 下复制值
- python - 我们可以为 pandas 进行数据帧级别的异常处理吗?
- android - Android中的DownloadManager没有显示进度条?
- sql-server - 中间有标量变量的 SELECT 语句
- python - 有没有办法使用 Python Win32com 模块读取任何本地 PST 文件并将消息导出为 MSG 文件?
- ios - 转换为 pdf 时,核心绘图图呈现为黑框
- python - 在 Pandas DataFrame 中添加 Week OF 列