修改字典列表中空字符串值时出现TypeError的解决方法及简化实现
问题分析与解决
咱们先拆解下你遇到的问题,再给你更简洁的处理方式:
你的代码错误原因
- 参数命名冲突:你把函数参数命名为
dict,这是Python的内置类型名称,容易引发混淆,建议换成data_list这类清晰的名字。 - 索引使用错误:报错的核心是这句
dict[value] = "IMG"——你传入的dict其实是个列表,而value是空字符串,用字符串当列表索引肯定会触发TypeError。正确的做法是修改当前遍历到的字典里的对应键值,比如item[key] = "IMG"。
修正后的基础版本
先把你的函数改对,同时优化遍历逻辑(直接遍历列表元素比用range(len())更直观):
def clean_empty_string(data_list): for item in data_list: for key, value in item.items(): if key == 'message' and value == '': item[key] = "IMG" return data_list
更简便的写法(一行搞定)
如果想更简洁,可以用列表推导式+字典推导式,一行完成数据清理:
# 注意:你原data里的字典有重复key,Python会自动保留最后一个,所以正确的初始数据应该是下面这样 data = [{"message": "Hello"}, {"message": ""}] cleaned_data = [{k: "IMG" if k == "message" and v == "" else v for k, v in item.items()} for item in data]
另外提个小细节:你原来的data = [{"message" : "Hello", "message" : "" }]中,一个字典里重复定义了message键,Python会自动覆盖前面的键值对,最终这个字典会变成{"message": ""},如果是笔误的话,记得改成多个字典组成的列表哦~
内容的提问来源于stack exchange,提问作者SnakeR
相关产品推荐
相关产品推荐

