簡體   English   中英

將詞典對合並到詞典列表中

[英]Merging dictionary pairs in a list of dictionaries

輸入:

[{'name': 'pc1'},
{'data': [[20, 400], [30, 450]]},
{'name': 'pc2'},
{'data': [[40, 525], [50, 600], [70, 680]]},
{'name': 'pc3'},
{'data': [[80, 700], [90, 980]]}]

我想要達到的目標:

[{'name': 'pc1', "data": [[20,400]. [30,450]]},
{'name': 'pc2', "data": [[40, 525], [50, 600], [70, 680]]},
etc.

我似乎無法想出一種優雅的方法來做到這一點,同時又保留了我正在尋找的確切結構。 “數據”值是列表列表至關重要。

我正在使用Python 2.7

Python 3.5+

使用PEP 448中的語法:

>>> [{**x, **y} for x, y in zip(l[::2], l[1::2])]
[{'data': [[20, 400], [30, 450]], 'name': 'pc1'}, ...]

舊版Python:

>>> [dict(x, **y) for x, y in zip(l[::2], l[1::2])]
[{'data': [[20, 400], [30, 450]], 'name': 'pc1'}, ...]

我會這樣做。 應該可以在2.6+以上的版本中工作

original = [{'name': 'pc1'},
            {'data': [[20, 400],
                      [30, 450]]},
            {'name': 'pc2'},
            {'data': [[40, 525],
                      [50, 600],
                      [70, 680]]},
            {'name': 'pc3'},
            {'data': [[80, 700],
                      [90, 980]]}]
new = []
for d1,d2 in zip(original[::2], original[1::2]):
    d1.update(d2)
    new.append(d1)

vaultah編輯了他的答案以包含python2,但我不知道您可以做dict(dict1,** dict2),我更喜歡他的答案,但我將其留作替代。

另外,邁克·穆勒(MikeMüller)使用副本的答案(和評論)提醒我您可以就地執行。我的代碼正在修改原始變量。 所以你可以這樣做:

original = [{'name': 'pc1'},
            {'data': [[20, 400],
                      [30, 450]]},
            {'name': 'pc2'},
            {'data': [[40, 525],
                      [50, 600],
                      [70, 680]]},
            {'name': 'pc3'},
            {'data': [[80, 700],
                      [90, 980]]}]
for d1,d2 in zip(original[::2], original[1::2]):
    d1.update(d2)
    original.remove(d2)

然后原始列表將等於您想要的列表,而無需創建新變量。 但我仍然更喜歡Vault的襯板

這差不多可以解決了

values = [{'name': 'pc1'},
{'data': [[20, 400], [30, 450]]},
{'name': 'pc2'},
{'data': [[40, 525], [50, 600], [70, 680]]},
{'name': 'pc3'},
{'data': [[80, 700], [90, 980]]}]

groupings = [{'name' : values[g]['name'], 'data' : values[g + 1]['data']} for g in xrange(0, len(data) - 1, 2)]
>>> [dict(*zip(d1.items(), d2.items())) for d1, d2  in zip(orig[::2], orig[1::2])]
[{'data': [[20, 400], [30, 450]], 'name': 'pc1'},
 {'data': [[40, 525], [50, 600], [70, 680]], 'name': 'pc2'},
 {'data': [[80, 700], [90, 980]], 'name': 'pc3'}]

哪里:

>>> orig = [{'name': 'pc1'},
            {'data': [[20, 400], [30, 450]]},
            {'name': 'pc2'},
            {'data': [[40, 525], [50, 600], [70, 680]]},
            {'name': 'pc3'},
            {'data': [[80, 700], [90, 980]]}]

暫無
暫無

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

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