亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從包含列表的列表中創建Python字典

從包含列表的列表中創建Python字典

qq_花開花謝_0 2024-01-24 15:40:55
我創建了一個列表,其中包含列表;[['2020/10/07', 'AA123', '19.24', '22.00'],  ['2020/11/17', 'BBB123', '23.59', '00.00'],  ['2020/14/67', 'AAA123', '08.00', '16.00']]問題 1:但是我不確定如何將此列表變成字典。我已經嘗試了幾次,但沒有任何效果對我來說。我希望每個列表中的第二個值(索引 1)作為字典的鍵,其余的作為值。問題 2:如果每個列表中的第二個元素存在于多個列表中,我希望在同一個鍵下找到它們。
查看完整描述

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函數從列表中提取所有唯一值)。


查看完整回答
反對 回復 2024-01-24
?
呼如林

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:]

  1. 創建一個空字典來放置您的值。

  2. 瀏覽數據中的所有條目。

  3. 輸入該條目的鍵 ( sub_list[1]),我們將使用它來索引我們的字典。

  4. 如果該鍵已經存在,則使用該項目的非值擴展存儲在該列表中的值[1](例如['a', 'b', 'c']變為['a', 'b', 'c', 'd', 'e'])。

  5. 如果該鍵不存在,只需在字典中使用非[1]值創建一個新鍵。


查看完整回答
反對 回復 2024-01-24
?
隔江千里

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')]}


查看完整回答
反對 回復 2024-01-24
  • 3 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號