簡體   English   中英

將多個列表作為值,以一個列表作為鍵

[英]Put multiple lists as value with one list as key

我有 3 個lists和一個這樣的string

a = ['a', 'b', 'c']
b = [1, 2, 3, 4, 5]
c = [10, 11, 14, 15, 16]

string = 'buy'

我需要一個這樣的字典列表:

[{'a':1 , 'b':10 , 'c':'buy'},{'a':2 , 'b':11 , 'c':'buy'},{'a':3 , 'b':14 , 'c':'buy'},...]
result = [ dict(zip(a,[*v, 'buy'])) for v in zip(b,c) ]

您可以只使用 zip bc並使用它來制作字典:

a = ['a', 'b', 'c']
b = [1, 2, 3, 4, 5]
c = [10, 11, 14, 15, 16]

[{'a':a, 'b':b, 'c':'buy'} for a, b, in zip(b,c)]

結果:

[{'a': 1, 'b': 10, 'c': 'buy'},
 {'a': 2, 'b': 11, 'c': 'buy'},
 {'a': 3, 'b': 14, 'c': 'buy'},
 {'a': 4, 'b': 15, 'c': 'buy'},
 {'a': 5, 'b': 16, 'c': 'buy'}]

如果你想動態地a密鑰,你可以 zip 使用類似 itertools zip_longest的東西來獲取 static 字符串:

from itertools import zip_longest

a = ['a', 'b', 'c']
b = [1, 2, 3, 4, 5]
c = [10, 11, 14, 15, 16]

[dict(zip_longest(a, tup, fillvalue='buy')) for tup in zip(b,c)]

結果相同:

[{'a': 1, 'b': 10, 'c': 'buy'},
 {'a': 2, 'b': 11, 'c': 'buy'},
 {'a': 3, 'b': 14, 'c': 'buy'},
 {'a': 4, 'b': 15, 'c': 'buy'},
 {'a': 5, 'b': 16, 'c': 'buy'}]

另一種方法是使用itertools.repeat()在壓縮元組中包含 static 字符串:

from itertools import repeat

a = ['a', 'b', 'c']
b = [1, 2, 3, 4, 5]
c = [10, 11, 14, 15, 16]

[dict(zip(a, tup)) for tup in zip(b,c, repeat('buy'))]

這應該可以滿足您的需求:

[{a[0]:vb, a[1]:vc, a[2]:string} for vb, vc in zip(b, c)]

它產生:

[{'a': 1, 'b': 10, 'c': 'buy'},
 {'a': 2, 'b': 11, 'c': 'buy'},
 {'a': 3, 'b': 14, 'c': 'buy'},
 {'a': 4, 'b': 15, 'c': 'buy'},
 {'a': 5, 'b': 16, 'c': 'buy'}]

它從 list a獲取 dict 鍵,而'buy'來自string

您可以為您的任務使用zip()列表理解字典理解

嘗試這個:

a = ['a', 'b', 'c']
b = [1, 2, 3, 4, 5]
c = [10, 11, 14, 15, 16]

print([{ a[0]:i, a[1]:j, a[2]:'buy'} for i,j in zip(b,c)])

或者

print([dict(zip(a, [i, j, "buy"])) for i,j in zip(b,c)])

輸出:

[{'a': 1, 'b': 10, 'c': 'buy'}, {'a': 2, 'b': 11, 'c': 'buy'}, {'a': 3, 'b': 14, 'c': 'buy'}, {'a': 4, 'b': 15, 'c': 'buy'}, {'a': 5, 'b': 16, 'c': 'buy'}]

暫無
暫無

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

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