[英]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.