J'ai deux dictionnaires:
A, 20, a, d, 0 B, 30, a, d, 1 C, 40, a, d, 2
Je veux énumérer les valeurs des dictionnaires simultanément; similaire à ceci: Énumérer deux listes Python simultanément? :
for index, (value1, value2) in enumerate(zip(dic_of_dics1, dic_of_dics2)): print (value1, value2, subkey1, subkey2, index)
Sortie souhaitée:
dic_of_dics1 = {1: {"a": "A"}, 2: {"a": "B"}, 3: {"a": "C"}} dic_of_dics2 = {1: {"d": "20"}, 2: {"d": "30"}, 3: {"d": "40"}}
4 Réponses :
Pour votre cas simplifié:
A, 20, a, d, 0 B, 30, a, d, 1 C, 40, a, d, 2
Le résultat:
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=', ')
Mettre à jour (même shorter):
A, 20 B, 30 C, 40
La sortie:
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]))
serait-ce aussi correct: pour index, (val1, val2) dans enumerate zip (dic_of_dics1.values (), dic_of_dics2.values ()) car j'ai aussi besoin de l'index
@ David8, car j'ai aussi besoin de l'index - Réfléchissez à la manière dont l'index est censé être utilisé dans votre question. Quel est le lien avec la sortie en question?
J'ai ajouté une modification mais c'est peut-être trop long et enlève-t-elle la question d'origine? dois-je le conserver ou le déplacer vers une nouvelle question?
Essayez ceci.
{'A': '20', 'B': '30', 'C': '40'}
OU
enumerate with zip - itérer sur deux listes et leurs index en utilisant enumerate avec 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:
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)
Une seule ligne facultative:
A, 20 B, 30 C, 40
Sortie:
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())]))
Encore une version lisible et robuste en décompressant et triée, et en ajoutant l'index:
A, 20, a, d, 0 B, 30, a, d, 1 C, 40, a, d, 2
sortie:
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)]))
I penser que dépendre de l'ordre de la clé de dict est une mauvaise idée.
J'aime ce format, y a-t-il un moyen d'extraire également la deuxième 'clé' par exemple ("a", "d"). J'utilise l'index pour itérer sur tb = widgets.TabBar (list (dicimagename.keys ())) dans mon code d'origine, je l'ai simplifié ici car mon code d'origine est vraiment long