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

Python中如何从字典列表提取多组指定键值生成新字典?

问题描述

我有一个存储如下内容的变量initial_ltp:

initial_ltp = {'s': 'ok', 'd': [{'n': 'MCX:CRUDEOIL23JANFUT', 's': 'ok', 'v': {'ch': 47.0, 'chp': 0.74, 'lp': 6377.0, ...}}, {'n': 'MCX:SILVERMIC23FEBFUT', 's': 'ok', 'v': {'ch': 485.0, 'chp': 0.71, 'lp': 68543.0, ...}}]}

我尝试收集每个子字典中的'n'和'v'下的'lp'键值对存入新字典ltp,使用代码:

if 'd' in initial_ltp.keys(): ltp[initial_ltp['d'][0]['n']] = initial_ltp['d'][0]['v']['lp']

但该代码仅获取第一个元素的键值对,得到ltp为:

{'MCX:CRUDEOIL23JANFUT': 6377.0}

我的预期输出是:

{'MCX:CRUDEOIL23JANFUT': 6377.0, 'MCX:SILVERMIC23FEBFUT': 68543.0}

请问如何修改代码以获取所有目标键值对?

解决方案

原代码仅取了initial_ltp['d']列表的第一个元素(索引0),要获取所有元素的键值对,需要遍历整个列表,以下是几种可行实现方式:

方法1:for循环遍历

先初始化空字典,再逐个遍历列表元素添加键值对:

ltp = {}
if 'd' in initial_ltp:
    for item in initial_ltp['d']:
        ltp[item['n']] = item['v']['lp']

方法2:字典推导式(简洁写法)

用Python字典推导式一行完成逻辑,同时通过get方法避免'd'不存在时的报错:

ltp = {item['n']: item['v']['lp'] for item in initial_ltp.get('d', [])}

如果initial_ltp中没有'd'键,get('d', [])会返回空列表,最终得到空字典。

方法3:带存在性判断的推导式

若要保留原代码中对'd'存在性的显式判断,可写成:

ltp = {}
if 'd' in initial_ltp:
    ltp = {item['n']: item['v']['lp'] for item in initial_ltp['d']}

内容的提问来源于stack exchange,提问作者acr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:55:48