3 回答

TA貢獻1856條經驗 獲得超11個贊
您可以首先使用列表理解從第一個列表中提取鍵和值:
keys = [row[1] for row in l] values = [[row[0], row[2],row[3]] for row in l]
然后使用相同的技術創建字典:
{k:v for k,v in zip(keys,values)}
(該zip
函數允許同時迭代 2 個列表鍵和值)
對于問題 2:不幸的是,您不能在字典中多次使用相同的鍵,您可能必須使用它len(keys) == len(set(keys))
來測試您的鍵列表是否有重復項(該set
函數從列表中提取所有唯一值)。

TA貢獻1798條經驗 獲得超3個贊
嘗試這個:
my_dict = {}
for sub_list in vals:
val_key = sub_list[1]
if val_key in my_dict:
my_dict[val_key].extend([sub_list[0]] + sub_list[2:])
else:
my_dict[val_key] = [sub_list[0]] + sub_list[2:]
創建一個空字典來放置您的值。
瀏覽數據中的所有條目。
輸入該條目的鍵 (
sub_list[1]
),我們將使用它來索引我們的字典。如果該鍵已經存在,則使用該項目的非值擴展存儲在該列表中的值
[1]
(例如['a', 'b', 'c']
變為['a', 'b', 'c', 'd', 'e']
)。如果該鍵不存在,只需在字典中使用非
[1]
值創建一個新鍵。

TA貢獻1906條經驗 獲得超10個贊
raw = [
# <date> <key> <val1> <val2>
['2020/10/07', 'AAA123', '19.24', '22.00'],
['2020/11/17', 'BBB123', '23.59', '00.00'],
['2020/14/67', 'AAA123', '08.00', '16.00'],
]
(稍微編輯您的示例以具有重復的密鑰)
聽起來你希望你的輸出是這樣的:
{key: [info, ...], ...}
我們可以這樣做:
from collections import defaultdict, namedtuple
Data = namedtuple('Data', ('date', 'val1', 'val2'))
res = defaultdict(list)
for date, key, val1, val2 in raw:
data = Data(date, val1, val2)
res[key].append(data)
res = dict(res) # Strip defaultdict behavior
然后我們可以看到
import pprint
pprint.pprint(res)
給我們一個與期望類似的結果:
{'AAA123': [Data(date='2020/10/07', val1='19.24', val2='22.00'),
Data(date='2020/14/67', val1='08.00', val2='16.00')],
'BBB123': [Data(date='2020/11/17', val1='23.59', val2='00.00')]}
添加回答
舉報