You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从Python嵌套字典的列表中提取指定键值对?

提取嵌套字典列表中指定键值对的Python实现方法

嘿,刚接触Python字典的话,这种嵌套着列表的结构确实容易让人有点懵,我来一步步帮你搞定提取company_codetag的需求~

首先先把你的原始嵌套字典贴出来(方便对照):

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_codetag键,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_codetag这两个键,也可以直接用doc['company_code']来取值,比get()稍微快一点,但如果遇到缺失键的情况会抛出KeyError,所以还是推荐用get()更稳妥~

内容的提问来源于stack exchange,提问作者C. Boyer

火山引擎 最新活动