Python如何从字典列表元素中移除指定字符串片段和None值
Python 字典列表前缀清理与空值替换实现方案
核心思路
- 优先将所有值为
None的项替换为空字符串 - 仅对字符串类型的值执行前缀移除操作,避免修改整数id等非字符串字段
- 前缀采用精准头部匹配,不会误删内容其他位置的相同字符
全版本兼容实现(可读性最高)
该写法支持所有Python3版本,逻辑清晰易维护:
dict1 = [{'to_seat_url': '/api/1/seats/19014', 'id': 5051, 'employee_url': '/api/1/employees/4027'}, {'to_seat_url': '/api/1/seats/19013', 'id': 5052, 'employee_url': '/api/1/employees/4048'}, {'to_seat_url': '/api/1/seats/19012', 'id': 5053, 'employee_url': '/api/1/employees/4117'}, {'to_seat_url': None, 'id': 5054, 'employee_url': '/api/1/employees/15027'}] # 定义待移除的前缀 prefix_list = ['/api/1/employees/', '/api/1/seats/'] new_dict = [] for item in dict1: processed = {} for k, v in item.items(): if v is None: processed[k] = '' elif isinstance(v, str): # 匹配前缀并移除 for prefix in prefix_list: if v.startswith(prefix): v = v[len(prefix):] break processed[k] = v else: # 非字符串、非空值直接保留 processed[k] = v new_dict.append(processed)
如果你使用Python3.9及以上版本,可将切片逻辑
v = v[len(prefix):]替换为v = v.removeprefix(prefix),写法更直观。
极简推导式版本(Python3.8+支持)
如果追求代码简洁可以用推导式写法,仅需3行核心代码:
prefix_list = ('/api/1/employees/', '/api/1/seats/') new_dict = [{ k: '' if v is None else v[len(p):] if isinstance(v, str) and (p := next((x for x in prefix_list if v.startswith(x)), None)) else v for k, v in d.items() } for d in dict1]
两种写法运行后得到的new_dict都和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者Ashu
相关产品推荐
相关产品推荐

