我有 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 回圈進行列舉,解壓縮元組。
uj5u.com熱心網友回復:
您可以使用 group by(來自 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':
[([], []), ([], [])]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/358206.html
上一篇:在回圈內更新字典
