You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:15:03