如何从Python字典中仅提取嵌套内层键值对?
提取Python字典中的所有内层键值对
给定以下Python字典,需要仅提取其中的内层键值对(不包含destination、orderData这类外层键):
{ "destination": { "name": "accountName" }, "orderData": { "sourceOrderId": "1234512345", "items": [ { "sku": "Business Cards", "sourceItemId": "1234512346", "components": [ { "code": "Content", "fetch": true, "path": "http://www.w2psite.com/businessCard.pdf" } ] } ], "shipments": [ { "shipTo": { "name": "John Doe", "companyName": "Acme" }, "carrier":{ "code": "fedex", "service": "ground" } } ] } }
期望输出示例(需覆盖所有内层键值对,且输出不含引号):
name: accountName sourceOrderId: 1234512345 sku: Business Cards sourceItemId: 1234512346 code: Content fetch: True path: http://www.w2psite.com/businessCard.pdf name: John Doe companyName: Acme code: fedex service: ground
注意事项
- 输出中不能包含
"符号 - 数据可能存在多层嵌套的字典和列表,需处理所有层级的内层键值对
我尝试了以下代码,但无法得到预期结果:
for key, value in json_f.items(): print(key, value)
解决方案
可以通过递归遍历的方式处理嵌套的字典和列表,当遇到值为非字典、非列表的元素时,直接输出键值对:
def extract_inner_pairs(data): # 处理列表:遍历每个元素递归处理 if isinstance(data, list): for item in data: extract_inner_pairs(item) # 处理字典:遍历键值对,值是字典/列表则递归,否则输出 elif isinstance(data, dict): for key, value in data.items(): if isinstance(value, (dict, list)): extract_inner_pairs(value) else: # 布尔值自动转为大写格式,输出不带引号 print(f"{key}: {value}") # 假设你的字典存储在json_f变量中 json_f = { "destination": { "name": "accountName" }, "orderData": { "sourceOrderId": "1234512345", "items": [ { "sku": "Business Cards", "sourceItemId": "1234512346", "components": [ { "code": "Content", "fetch": True, "path": "http://www.w2psite.com/businessCard.pdf" } ] } ], "shipments": [ { "shipTo": { "name": "John Doe", "companyName": "Acme" }, "carrier":{ "code": "fedex", "service": "ground" } } ] } } extract_inner_pairs(json_f)
代码说明
- 递归函数
extract_inner_pairs会先判断输入数据的类型:- 如果是列表,遍历每个元素继续递归处理
- 如果是字典,遍历每个键值对:若值是字典或列表则继续递归,否则直接输出
键: 值的格式
- 布尔值会自动转为Python默认的大写格式(如
True),字符串输出时不会带引号,完全符合要求
内容的提问来源于stack exchange,提问作者LOG
相关产品推荐
相关产品推荐

