簡體   English   中英

試圖從 2 個列表創建新字典 - 1 個元組,1 個用於字典鍵

[英]Stuck trying to create new dictionary from 2 lists - 1 of tuples, 1 for dictionary keys

我有 2 個列表。 a是一個元組列表,我想將其轉換為一個字典,該字典將 'a' 值保留為列表 - 使用第二個列表作為字典鍵。 我嘗試使用a's第一組作為元組列表中的“索引”值來與b列表中的“鍵”值結合。 這就是我所擁有的:

a = [(0, ['Potato'], [8]),
     (0, ['Tomato'], [2]),
     (0, ['Tomato'], [2]),
     (0, ['Potato'], [6]),
     (0, ['Potato'], [12]),
     (0, ['Potato'], [12]),
     (0, nan, nan),
     (1, [], []),
     (1, [], [])]

b = [('foo', 123), ('bar', 456)]

這就是我想要得到的:

newDict = {'foo' : [(['Potato'], ['Tomato'], ['Tomato'], ['Potato'], ['Potato'], ['Potato'], nan), ([8], [2], [2], [6], [12], [12], nan)], 
           'bar' : [([], []),([],[])]}

我嘗試通過各種 for 循環進行枚舉,解壓縮元組。

您可以使用 group by (from itertools) 根據第一個條目對a的元組進行分組,然后將其壓縮到b以將 'foo' 和 'bar' 與相應的 0 和 1 組配對:

a = [(0, ['Potato'], [8]),
     (0, ['Tomato'], [2]),
     (0, ['Tomato'], [2]),
     (0, ['Potato'], [6]),
     (0, ['Potato'], [12]),
     (0, ['Potato'], [12]),
     (0, 'nan', 'nan'),
     (1, [], []),
     (1, [], [])]

b = [('foo', 123), ('bar', 456)]


from itertools import groupby

r = {tb[0]:list(zip(*ta))[1:] for tb,(_,ta) in zip(b,groupby(a,lambda t:t[0]))}

print(r)
{'foo': 
  [(['Potato'], ['Tomato'], ['Tomato'], ['Potato'], ['Potato'], ['Potato'], 'nan'), 
   ([8], [2], [2], [6], [12], [12], 'nan')], 
 'bar': 
  [([], []), ([], [])]}

暫無
暫無

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

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