簡體   English   中英

列表列表中的 Python 字典

[英]Python dictionary from list of lists

我正在嘗試生成一個字典來計算具有條件的列表列表中的項目。 我試圖將結果作為元組中的值獲取,例如,如果我的初始數據是這樣的列表列表:

my_list = [[(1,2),5],[(1,2),9],[(2,3),0],[(2,3),2],[(1,2),5],[(1,2),9],[(2,3),5]]

期望的結果將是一個字典,其中每個列表的第一個元素都是鍵。 字典的值將是兩個元素的元組,具有相同鍵的項目數(總計數)以及第二個項目有多少值為 5(條件計數)。

dict_desired = {(1,2):(4,2),(2,3):(3,1)}

我這樣做了,但似乎不是很整潔,我想知道是否有更多 python 經驗的人可以幫助我使用理解來構建它。

提前致謝!

pythonic,有效的方法是使用循環:

my_list = [[(1,2),5],[(1,2),9],[(2,3),0],[(2,3),2],[(1,2),5],[(1,2),9],[(2,3),5]]
result = {}
empty = 0, 0

for key, value in my_list:
    count, fives = result.get(key, empty)
    result[key] = (count + 1, fives + (value == 5))

要使用推導來做到這一點,您需要在每次迭代時遍歷列表,例如:

result = {
    key:(
        sum(k == key for k,_ in my_list),
        sum(v == 5 for k,v in my_list if k == key)
    ) for key, value in my_list
}

這是非常unpythonic和低效的。 您也許可以先嘗試從鍵中創建一個集合,但它仍然不會像常規的 for 循環那樣高效,也許有一些使用賦值表達式的 hacky 方法可以使其有效地工作,但它肯定贏了不要更整潔

所以,你有一個很好的、可讀的、線性時間的 for 循環,而不是一個復雜的、不可讀的、二次時間字典理解。 選擇很明確,IMO。

暫無
暫無

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

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