如何从Python嵌套字典的列表中提取指定键值对?
提取嵌套字典列表中指定键值对的Python实现方法
嘿,刚接触Python字典的话,这种嵌套着列表的结构确实容易让人有点懵,我来一步步帮你搞定提取company_code和tag的需求~
首先先把你的原始嵌套字典贴出来(方便对照):
original_dict = { "count": 3, "document_type": "list", "documents": [ { "adminc_id": "5d834741f1e79df70494d614", "archived": False, "company_code": "AAAAAA", "created_at": "2020-09-16T13:07:54.482000+00:00", "customer_label": "pomme", "customer_ref": "fruit", "delivered_at": "2018-11-07T00:00:00+00:00", "document_type": "service", "state": "delivered", "subscribed_at": "2018-11-07T00:00:00+00:00", "tag": "EX46V4YQ", "techc_id": "5d834741f1e79df70494d614", "type": "energy", "updated_at": "2020-09-16T13:07:54.482000+00:00" }, { "adminc_id": "5f6e162958becabad3b64047", "archived": False, "company_code": "BBBBBB", "created_at": "2020-09-25T16:18:05.807000+00:00", "document_type": "service", "state": "subscribed", "tag": "T94893JQ", "techc_id": "5f6e162958becabad3b64047", "type": "telephony", "updated_at": "2020-09-25T16:18:05.807000+00:00" }, { "adminc_id": "5f62071fa6dbcad5bf20d832", "archived": False, "company_code": "AAAAAA", "created_at": "2020-09-25T16:15:27.590000+00:00", "document_type": "service", "state": "subscribed", "tag": "TV47X3XQ", "techc_id": "5f62071fa6dbcad5bf20d832", "type": "telephony", "updated_at": "2020-09-25T16:15:27.590000+00:00" } ], "limit": 50, "offset": 0 }
你已经知道用dict.get('documents')拿到了列表,接下来的核心就是遍历这个列表里的每一个子字典,提取你需要的两个键的值,组成新的字典,最后把这些新字典收集起来。
方法一:用列表推导式(简洁高效,Python风格)
这是Python里处理这类需求最常用的方式,一行代码就能搞定:
# 先拿到documents列表 docs = original_dict.get('documents') # 列表推导式提取指定键值对 result = [ {'company_code': doc.get('company_code'), 'tag': doc.get('tag')} for doc in docs ]
运行后result就是你想要的结果:
[ {'company_code': 'AAAAAA', 'tag': 'EX46V4YQ'}, {'company_code': 'BBBBBB', 'tag': 'T94893JQ'}, {'company_code': 'AAAAAA', 'tag': 'TV47X3XQ'} ]
这里用doc.get('key')而不是直接doc['key']的原因是:如果某个子字典里碰巧没有company_code或tag键,get()会返回None而不会直接报错,容错性更好。
方法二:用普通for循环(适合新手理解每一步)
如果觉得列表推导式有点抽象,用普通的循环拆解步骤会更清晰:
docs = original_dict.get('documents') result = [] # 初始化一个空列表用来存结果 # 遍历documents里的每个子字典 for doc in docs: # 新建一个空字典,存当前子字典的指定键值对 new_item = {} new_item['company_code'] = doc.get('company_code') new_item['tag'] = doc.get('tag') # 把新字典添加到结果列表里 result.append(new_item)
运行后得到的结果和方法一完全一样,这种方式能让你清楚看到每一步的操作,适合刚入门的时候理解逻辑。
小提示
如果你确定所有子字典里都一定有company_code和tag这两个键,也可以直接用doc['company_code']来取值,比get()稍微快一点,但如果遇到缺失键的情况会抛出KeyError,所以还是推荐用get()更稳妥~
内容的提问来源于stack exchange,提问作者C. Boyer




