簡體   English   中英

在字典中合並兩個列表-python

[英]combine two lists in a dictionary - python

如果我有兩個列表:

l_Y = [1, 2] 
l_Z = [3, 4]

實現此結果的最簡單方法是什么?

[{'a':1, 'b':1, 'c':'Y'}, {'a':2, 'b':2, 'c':'Y'}...
{'a':3, 'b':3, 'c':'Z'}, {'a':4, 'b':4, 'c':'Z'}]

基本上,如果列表為l_Y,則c的值應為Y,如果列表為l_Z,則c的值應為Z。

我嘗試了這個:

[{'a':nb, 'b':nb, 'c':letter} for nb in [l_Y, l_Z] letter='Y' if nb is l_Y else 'Z']

但出現了“ SyntaxError”

無論如何,nb返回完整列表而不是元素,所以不知道該怎么做...

鑒於此,我會做

[{'a':val,'b':val,'c':('Y' if lst==l_Y else 'Z')} for lst in (l_Y,l_Z) for val in lst]

不過,老實說,正如Blender在評論中提到的那樣,最好將列表存儲在dict中,如下所示:

lists = {'Y':[1,2],'Z':[3,4]}

並做

[{'a':val,'b':val,'c':key} for key,item in lists.items() for val in item]

兩者都導致

[{'a': 1, 'c': 'Y', 'b': 1}, {'a': 2, 'c': 'Y', 'b': 2}, {'a': 3, 'c': 'Z', 'b': 3}, {'a': 4, 'c': 'Z', 'b': 4}]

我想這就是您想要的。

dict方法有兩個好處-使其維護起來更整潔(僅在名稱空間中浮動一個變量名),並且使代碼更干凈(出於獲取/檢索列表的目的)。

舊方法要求您執行此操作以從結果中獲取列表:

lst_that_was_passed_in = globals()['l_'+<Y or Z>]

而更新的方法只需要lists[<Y or Z>] ,這使得維護起來更容易,命名空間更整潔,並且避免了麻煩。

您可以使用以下內容(不需要將列表放入字典或條件表達式中):

[{'a':v, 'b':v, 'c':c} 
    for (l, c) in zip((l_Y, l_Z), ('Y', 'Z')) 
        for v in l]

暫無
暫無

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

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