Python 2.7如何移除字典的timestamp及嵌套JSON的updated_date字段?
高效移除指定字段的实现方案
针对Python 2.7环境,要高效处理包含多个字典的列表,移除顶层timestamp字段以及attributes(JSON字符串)内的updated_date字段,推荐用列表推导式+字典推导式组合,这比显式循环更高效(底层由C实现,执行速度更快),具体实现如下:
核心代码
import json # 示例输入数据 data = [ { "timestamp": 1620000000, "attributes": '{"name": "test", "updated_date": "2021-05-03", "value": 100}', "other_field": "keep" }, { "timestamp": 1630000000, "attributes": '{"name": "demo", "updated_date": "2021-09-01", "value": 200}', "other_field": "retain" } ] # 高效处理逻辑 processed_data = [ { # 过滤顶层的timestamp字段 k: ( # 处理attributes字段:解析JSON→移除updated_date→转回字符串 json.dumps(json.loads(v).pop("updated_date", None)) if k == "attributes" else v ) for k, v in item.iteritems() if k != "timestamp" } for item in data ]
关键细节说明
- 避免显式循环:用列表推导式遍历整个列表,字典推导式处理每个字典的键值对,比
for循环+append的写法执行效率更高。 - JSON解析与序列化:通过
json.loads()将attributes的JSON字符串转为字典,用pop("updated_date", None)安全移除目标字段(第二个参数None避免字段不存在时抛出异常),再用json.dumps()转回字符串。 - 不修改原数据:推导式会生成新的字典和列表,原输入数据不会被改动,若需要原地修改可调整逻辑,但原地修改通常不如生成新数据安全。
可选优化(针对大量数据)
如果数据量极大,可以考虑用itertools.imap替代列表推导式,实现惰性迭代,减少内存占用:
import json import itertools def process_item(item): processed = {k: v for k, v in item.iteritems() if k != "timestamp"} attrs = json.loads(processed["attributes"]) attrs.pop("updated_date", None) processed["attributes"] = json.dumps(attrs) return processed # 惰性生成处理后的结果,适合超大数据集 processed_data = itertools.imap(process_item, data)
内容的提问来源于stack exchange,提问作者kumar Raj
相关产品推荐
相关产品推荐

