簡體   English   中英

嵌套列表的字典理解語法?

[英]Dict comprehension syntax for nested list?

如何使用 dict comprehension 完成以下過程? load_sample返回一個嵌套列表,它應該進入一個字典,其中第一列代表組(1 或 2)。

#test.txt structure 

1, 0.1, 0.2, 73
1, 0.11, 0.1, 101
2, 0.23, 0.01, 17
2, 0.12, 0.15, 23
2, 1.2, 2.30, 22



def load_sample(filename):
    with open(filename, 'r') as h:
        sample = [line.split(',') for line in h]
    return sample

batch = {}
d = load_sample("test.txt")
for line in d:
    key = line[0]
    if key not in batch:
        batch[key] = []
    batch[key] += [(float(line[1]), float(line[2]), float(line[3]))] 

嘗試這個:

batch = {this_k:[tuple(map(float, v)) for k, *v in d if k == this_k] for this_k in set([n[0] for n in d])}

輸出:

{'1': [(0.1, 0.2, 73.0), (0.11, 0.1, 101.0)], '2': [(0.23, 0.01, 17.0), (0.12, 0.15, 23.0), (1.2, 2.3, 22.0)]}

這個怎么運作:

我們制作了一set我們想要的所有鍵( set([n[0] for n in d]) - [n[0] for n in d]意味着我們只有每個鍵的第一個項目的列表子列表)。

然后我們迭代每個鍵( for this_k in ... )。

為了制作字典的項目,我們使用this_k:[tuple(map(float, v)) for k, *v in d if k == this_k]

第一個位( this_k )告訴 Python 我們想要的鍵(我們正在迭代的集合中的一個項目)。 第二位是我們想要的值。

for k, *v in d意味着遍歷for k, *v in d每個項目(我們告訴 Python 將第一個值 [我們的字典鍵] 放入k ,將其他值打包到v ,所以我們現在有了我們的鍵,以及我們的價值 )。

接下來,我們檢查k是否是正確的鍵(請記住,我們正在為d每個鍵創建匹配行列表)。 這是通過if k == this_k

接下來,我們創建一個映射將v所有值轉換為浮點數( map(float, v) ),然后我們將映射對象轉換為浮點數tuple

希望這是有道理的:)

暫無
暫無

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

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