簡體   English   中英

同時枚舉2個python字典的值?

[英]Enumerate over values of 2 python dictionary of dictionaries simultaneously?

我有兩個字典:

dic_of_dics1 = {1: {"a": "A"}, 2: {"a": "B"}, 3: {"a": "C"}}
dic_of_dics2 = {1: {"d": "20"}, 2: {"d": "30"}, 3: {"d": "40"}}

我想同時列舉字典的值; 與此類似: 同時枚舉兩個python列表?

for index, (value1, value2) in enumerate(zip(dic_of_dics1, dic_of_dics2)):
print (value1, value2, subkey1, subkey2, index) 

所需的輸出:

A, 20, a, d, 0
B, 30, a, d, 1
C, 40, a, d, 2

對於您的簡化情況:

dic_of_dics1 = {1: {"a": "A"}, 2: {"a": "B"}, 3: {"a": "C"}}
dic_of_dics2 = {1: {"d": "20"}, 2: {"d": "30"}, 3: {"d": "40"}}

for val1, val2 in zip(dic_of_dics1.values(), dic_of_dics2.values()):
    print('{}, {}'.format(list(val1.values())[0], list(val2.values())[0]))

輸出:

A, 20
B, 30
C, 40

更新 (甚至更短 ):

for i, (d1, d2) in enumerate(zip(dic_of_dics1.values(), dic_of_dics2.values())):
    (k1, v1), (k2, v2) = *d1.items(), *d2.items()
    print(v1, v2, k1, k2, i, sep=', ')

輸出:

A, 20, a, d, 0
B, 30, a, d, 1
C, 40, a, d, 2

通過解壓縮和排序並添加索引,可以得到一種更具可讀性和更強大的版本:

dic_of_dics1 = {2: {"a": "B"}, 1: {"a": "A"}, 3: {"a": "C"}}
dic_of_dics2 = {1: {"d": "20"}, 2: {"d": "30"}, 3: {"d": "40"}}

for i, k in enumerate(sorted(dic_of_dics1)):
    dic1, dic2 = dic_of_dics1[k], dic_of_dics2[k]
    (k_a,), (a,), (k_b,), (b,) = dic1.keys(), dic1.values(), dic2.keys(), dic2.values()
    print(', '.join([a, b, k_a, k_b, str(i)]))

輸出:

A, 20, a, d, 0
B, 30, a, d, 1
C, 40, a, d, 2

我認為,取決於字典鍵的順序是一個壞主意。

嘗試這個。

dic_of_dics1 = {1: {"a": "A"}, 2: {"a": "B"}, 3: {"a": "C"}}
dic_of_dics2 = {1: {"d": "20"}, 2: {"d": "30"}, 3: {"d": "40"}}

new_dict = {}
for i in dic_of_dics1:
    new_dict[list(dic_of_dics1[i].values())[0]] = list(dic_of_dics2[i].values())[0]
print(new_dict)

要么

用zip枚舉 -使用枚舉和zip迭代兩個列表及其索引

new_dict={}

for index,(value1, value2) in enumerate(zip(dic_of_dics1.values(), dic_of_dics2.values())):
    new_dict[list(value1.values())[0]] = list(value2.values())[0]

print(new_dict)

O / P:

{'A': '20', 'B': '30', 'C': '40'}

可選的單線:

print('\n'.join([', '.join([list(x.values())[0], list(y.values())[0]]) for x, y in zip(dic_of_dics1.values(), dic_of_dics2.values())]))

輸出:

A, 20
B, 30
C, 40

暫無
暫無

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

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