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
相关产品推荐
相关产品推荐

