Python字典列表值更新时被转为字符串的问题求助
解决方法
你现在的问题完全是因为不该把列表转成字符串处理——把data['tasks'](原本是列表)转成字符串后,再用正则替换得到的还是字符串,最后传给data.update()不仅逻辑错误(update只认字典),还直接把列表类型搞没了。
正确的做法是直接操作列表里的每个字典,不用碰字符串转换:
import json import re json_file = open(json_path + json_template_file) data = json.load(json_file) # 替换成你实际要设置的task_key值 target_task_key = "你的新task_key" # 匹配原task_key格式的正则(修正了原正则的语法问题) task_key_valid_pattern = re.compile(r"[!-/:-@[-`{-~a-zA-Z][!-/:-@[-`{-~a-zA-Z0-9]*") for key in data: match key: case 'name': a = 1 case 'tasks': # 遍历tasks列表里的每一个任务字典 for task in data[key]: # 如果原task_key符合你定义的格式,就替换成新值 if task_key_valid_pattern.fullmatch(task['task_key']): task['task_key'] = target_task_key # 如果不管格式直接替换,就去掉if判断,直接赋值: # task['task_key'] = target_task_key
关键说明
- 直接操作列表中的字典元素,完全保留原始的列表类型;
- 原代码里的
str(data[key])和正则替换字符串的操作完全没必要,既容易出错又丢失类型; data.update()是用来合并字典的,你传字符串进去本身就是错误用法,直接修改data['tasks']里的元素才是正确方式。
内容的提问来源于stack exchange,提问作者Pshymonz
相关产品推荐
相关产品推荐

