簡體   English   中英

如何使用兩個相同的鍵和不同的值從 Python 中的三個不同列表創建字典?

[英]How to create dictionary from three different list in Python using two same Keys and different values?

我有三個列表:

包含鍵的列表是:

keys = ['testname', 'output']

包含值的列表是:

value1 = ['pizza', 'dog', 'lion']
value2 = ['12.3', '356', '45.6']

我想要的 output 是:

{
 "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 的方法,例如,如果value1value2是 DataFrame 的列。 但是,對於大量數據,問題的限制因素始終是您需要生成嵌套字典這一事實。 將最初建議的方法與潛在的 pandas 方法進行比較,以處理大量數據(無 for 循環),事實證明前者要快得多:

import numpy as np
import pandas as pd
keys = ['testname', 'output']

value1 = list(np.random.choice(['pizza', 'dog', 'lion'], 100_000))
value2 = list(map(str, np.round(np.random.random(100_000) * 1000, 1)))

%timeit {"Labresult": [dict(zip(keys, pair)) for pair in zip(value1, value2)]}
# 56 ms ± 1.8 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

df = pd.DataFrame({"testname": value1, "output": value2})
%timeit {"Labresult": df.apply(dict, axis=1).tolist()}
# 1.1 s ± 50.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

如果您可以選擇更改所需結果的形狀/數據類型(例如,沒有嵌套字典),則可以進行改進。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM