Python嵌套列表内字典添加键值对报错解决:'list' object is not a mapping
给嵌套列表中的字典添加键值对的问题解决
错误原因
你的代码存在两个问题:
- 变量名笔误:代码里的
char_id应该是定义好的titleID; - 核心错误:
data的每个元素是子列表(例如[{'title': 'Line'}]),并非字典。当你用zip(titleID, data)配对时,dict_2对应的是子列表,而字典解包语法**只能作用于字典类型,因此抛出'list' object is not a mapping的错误。
正确实现方式
因为data的每个子列表里只有一个字典,我们只需要取出该字典,与titleID中的对应字典合并后,重新包装成子列表即可。
写法一(嵌套遍历)
data = [[{'title': 'Line'}], [{'title': 'asd'}]] titleID = [{'id': 373}, {'id': 374}] combine = [ [{**sub_dict, **id_dict}] for id_dict, sub_list in zip(titleID, data) for sub_dict in sub_list ]
写法二(索引取值,更直观)
如果确定每个子列表只有一个元素,可以直接通过索引[0]取出字典:
data = [[{'title': 'Line'}], [{'title': 'asd'}]] titleID = [{'id': 373}, {'id': 374}] combine = [ [{**sub_list[0], **id_dict}] for id_dict, sub_list in zip(titleID, data) ]
执行上述代码后,会得到你期望的输出:
[[{'id': 373, 'title': 'Line'}], [{'id': 374, 'title': 'asd'}]]
内容的提问来源于stack exchange,提问作者Gnani Kim
相关产品推荐
相关产品推荐

