我有三個串列(串列)-index_1和. 我想將它們結合起來制作一個嵌套字典。字典頂層的鍵應該是. 第二級應該由(它具有對應于、和的 3 個元素)作為鍵。字典第二級中的值應包含值并存盤在串列中,如.index_2index_3index_1 = ['item1','item2','item3']index_2'item1''item2''item3'index_3
我有點卡住了,認為我正在創建如下所示的過于復雜的回圈。任何評論都會很棒。
# input lists
index_1 = ['item1', 'item2', 'item3']
index_2 = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
index_3 = [[0, 1, 2, 3, 4], [99, 100], [0, 1, 2]]
# desired output
my_dict = {'item1' : {'a' : [0, 1, 2, 3, 4], 'b' : [0, 1, 2, 3, 4], 'c' : [0, 1, 2, 3, 4]},
'item2' : {'d' : [99, 100], 'e' : [99, 100], 'f' : [99, 100]},
'item3' : {'g' : [0, 1, 2], 'h' : [0, 1, 2], 'i' : [0, 1, 2]}}
# my loop that didnt work
d = defaultdict(defaultdict)
for i in range(len(index_1)):
for x, y, z in zip([index_1[i]], [index_2[i]], [index_3[i]]):
d[x][y] = [z]
uj5u.com熱心網友回復:
您可以使用 同步執行多個串列zip,例如,
zip(index_1, index_2, index_3)
在每一步中,第一個元素是鍵,接下來的元素構成嵌套字典。dict.fromkeys只要您可以在所有值中具有相同的參考,就可以制作嵌套字典:
d = {}
for k, nk, nv in zip(index_1, index_2, index_3):
d[k] = dict.fromkeys(nk, nv)
否則,您需要為每個元素創建一個新串列:
d = {}
for k, nk, nv in zip(index_1, index_2, index_3):
d[k] = {kk: list(nv) for kk in nk}
list(nv),nv[:]并且nv.copy()都是慣用的,并且是“例外證明規則”的一個很好的例子,用于 python 的理想,即有一種正確的做事方式。
您現在可以將整個事情簡化為嵌套字典理解:
d = {k: {kk: list(nv) for kk in nk} for k, nk, nv in zip(index_1, index_2, index_3)}
uj5u.com熱心網友回復:
你不需要defaultdict或者那個額外的回圈,你可以zip像下面這樣把它們放在一起:
index_1 = ['item1', 'item2', 'item3']
index_2 = [['a','b','c'], ['d','e','f'], ['g','h','i']]
index_3 = [[0,1,2,3,4],[99,100], [0,1,2]]
dic = {}
for x, y, z in zip(index_1, index_2, index_3):
dic[x] = {}
for k in y:
dic[x][k] = z[:]
這z[:]是為了確保創建一個新串列并且不會對所有鍵重復使用相同的參考。
如果您想使用,此代碼仍然可以使用,好處是您可以從回圈dic = defaultdict(defaultdict)中省略。dic[x] = {}不過,使用它可能更有意義defaultdict(dict),因為嵌套的默認字典沒有任何好處。
uj5u.com熱心網友回復:
你可以做:
index_1 = ['item1', 'item2', 'item3']
index_2 = [['a','b','c'], ['d','e','f'], ['g','h','i']]
index_3 = [[0,1,2,3,4],[99,100], [0,1,2]]
vals=zip(index_2, index_3)
di={}
for k1 in index_1:
ct=next(vals)
di[k1]={k:ct[1] for k in ct[0]}
如果您希望內部的各個串列是副本,請執行以下操作:
di[k1]={k:list(ct[1]) for k in ct[0]}
無論哪種情況:
>>> di
{'item1': {'a': [0, 1, 2, 3, 4], 'b': [0, 1, 2, 3, 4], 'c': [0, 1, 2, 3, 4]}, 'item2': {'d': [99, 100], 'e': [99, 100], 'f': [99, 100]}, 'item3': {'g': [0, 1, 2], 'h': [0, 1, 2], 'i': [0, 1, 2]}}
鑒于您的示例輸出:
>>> di==my_dict
True
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410028.html
標籤:
上一篇:將不同的字典合并到一個串列中
