如何使用两个相同的键和不同的值从Python中的三个不同列表创建字典?
我有三份清单: 包含密钥的列表为:如何使用两个相同的键和不同的值从Python中的三个不同列表创建字典?,python,list,dictionary,Python,List,Dictionary,我有三份清单: 包含密钥的列表为: keys = ['testname', 'output'] 包含值的列表包括: value1 = ['pizza', 'dog', 'lion'] value2 = ['12.3', '356', '45.6'] 我期望的输出是: { "Labresult":[ { 'testname': 'pizza', 'output': '12.3', }, { 'testname': 'dog'
keys = ['testname', 'output']
包含值的列表包括:
value1 = ['pizza', 'dog', 'lion']
value2 = ['12.3', '356', '45.6']
我期望的输出是:
{
"Labresult":[
{ 'testname': 'pizza',
'output': '12.3',
},
{ 'testname': 'dog',
'output': '356,'
},
{ 'testname': 'lion',
'output': '45.6',
}]
}
我尝试的是:
dict(zip(key, zip(value1,value2)))
很好的开始,但仍然需要对值进行循环:
{"Labresult": [dict(zip(keys, pair))
for pair in zip(value1, value2)]}
增编:
原则上,您也可以切换到基于Pandas的方法,例如,如果value1
和value2
是数据帧的列。但是,对于大量数据,问题的限制因素始终是您需要生成嵌套dict。将最初建议的方法与大量数据的潜在方法(无循环)进行比较,结果表明前者速度更快:
将numpy导入为np
作为pd进口熊猫
keys=['testname','output']
value1=列表(np.random.choice(['pizza'、'dog'、'lion'],100_000))
值2=列表(映射(str,np.round(np.random.random(100×000)*1000,1)))
%timeit{“Labresult”:[dict(zip(key,pair))用于zip(value1,value2)]中的pair
#每个回路56 ms±1.8 ms(7次运行的平均值±标准偏差,每个10个回路)
df=pd.DataFrame({“testname”:value1,“output”:value2})
%timeit{“Labresult”:df.apply(dict,axis=1.tolist()}
#每个回路1.1 s±50.1 ms(7次运行的平均值±标准偏差,每个回路1次)
如果您可以选择更改所需结果的形状/数据类型(例如,没有嵌套的dict),则可以进行改进。工作非常出色,我对如何迭代键列表中的项感到困惑。谢谢比如说,你不希望你的方法包含“for”,那么我们如何推进这一点呢?@JimitVaghela我在回答中补充了一些想法。干杯