Python如何按索引合并字典列表与嵌套列表新增键值对
报错原因
你遇到的TypeError: list indices must be integers or slices, not str是因为*x是存储字典的外层列表,不是单个字典对象*。Python列表仅支持整数、切片作为索引访问元素,不支持直接用字符串键给列表本身赋值,所以直接写x["resource_allocation"] = lst必然触发报错。
正确实现方法
你需要按索引位置一一对应,给x里的每一个字典单独新增resource_allocation键,再绑定lst同索引的子列表作为值。
写法1:直接修改原列表x(无新列表生成)
用enumerate同时拿到遍历的索引和当前字典对象,直接给字典赋值即可:
for index, provider_dict in enumerate(x): provider_dict["resource_allocation"] = lst[index]
执行完后原x列表里的每个字典就会新增对应键,直接使用x就是你要的合并结果。
写法2:生成全新的合并列表(不修改原x数据)
如果你不想改动原始的x列表,可以遍历的时候拷贝原字典生成新对象,组装成全新的结果列表:
merged_result = [] for index, provider_dict in enumerate(x): # 浅拷贝原字典,避免修改原始数据 current_dict = provider_dict.copy() current_dict["resource_allocation"] = lst[index] merged_result.append(current_dict)
注意事项
- 使用前请确认
x和lst长度一致,若lst长度小于x会触发索引越界错误,若lst长度大于x,超出部分的子列表不会被使用 - 第一种写法里遍历拿到的
provider_dict是x中存储的原字典引用,赋值操作会直接修改原列表内的字典内容,不需要额外给x重新赋值
内容的提问来源于stack exchange,提问作者netv
相关产品推荐
相关产品推荐

