簡體   English   中英

從列表創建字典?

[英]Create a dictionary from lists?

我在 python 中有以下結構的兩個列表:

list1 = [[x1,y1],[x2,y2],[x3,y3],[x4,y4],[x5,y5],[x6,y6],[x7,y7],[x8,y8]]
list2 = [1,1,2,2,3,3,3,4]

我想用第二個列表的鍵和第一個列表的值創建一個字典,如下所示:

{1: [[x1,y1], [x2,y2]],
 2: [[x3,y3], [x4,y4]],
 3: [[x5,y5], [x6,y6], [x7,y7]],
 4: [x8,y8]}

在 python 中執行此操作的最有效方法是什么?

我使用了 zip 命令:

newlist = zip(list2, list1)

但是現在我不清楚如何在我想要的字典中轉換它。

不確定這是否是最優化的,但這里有一段緊湊的代碼可以做到:

vals = [["x1","y1"],["x2","y2"],["x3","y3"],["x4","y4"],["x5","y5"],["x6","y6"],["x7","y7"],["x8","y8"]]
keys = [1,1,2,2,3,3,3,4]

result = {}
for k,v in zip(keys,vals):
    result[k] = result.get(k, []) + [v]

# output: {1: [['x1', 'y1'], ['x2', 'y2']], 2: [['x3', 'y3'], ['x4', 'y4']], 3: [['x5', 'y5'], ['x6', 'y6'], ['x7', 'y7']], 4: [['x8', 'y8']]}

如果您不介意使用外部庫,那么我會推薦iteration_utilities.groupedby (披露:我是該庫的作者):

>>> list1= [['x1','y1'],['x2','y2'],['x3','y3'],['x4','y4'],['x5','y5'],['x6','y6'],['x7','y7'],['x8','y8']]
>>> list2 = [1,1,2,2,3,3,3,4]

>>> from iteration_utilities import groupedby
>>> from operator import itemgetter

>>> groupedby(zip(list2, list1), key=itemgetter(0), keep=itemgetter(1))
{1: [['x1', 'y1'], ['x2', 'y2']],
 2: [['x3', 'y3'], ['x4', 'y4']],
 3: [['x5', 'y5'], ['x6', 'y6'], ['x7', 'y7']],
 4: [['x8', 'y8']]}

在幕后,它就像使用collections.defaultdict ,它只是為您節省了手動迭代。


如果您的list2已“排序”,您還可以輕松使用itertools.groupby

>>> from itertools import groupby

>>> {key: [i[1] for i in values] for key, values in groupby(zip(list2, list1), itemgetter(0))}
{1: [['x1', 'y1'], ['x2', 'y2']],
 2: [['x3', 'y3'], ['x4', 'y4']],
 3: [['x5', 'y5'], ['x6', 'y6'], ['x7', 'y7']],
 4: [['x8', 'y8']]}

暫無
暫無

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

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