J'ai deux listes suivantes:
result = [17-Q2: 1(1.00), 17-Q3: 2(2.00), 17-Q4: 5(5.00), 18-Q1: 6(6.00)]
Je veux un dictionnaire de la manière suivante. Puis-je faire cela en Python?
list1 = ['17-Q2', '1.00', '17-Q3', '2.00', '17-Q4', '5.00', '18-Q1', '6.00'] list2 = ['17-Q2', '1', '17-Q3', '2', '17-Q4', '5', '18-Q1', '6']
4 Réponses :
Voici une approche:
result = {} list1=['17-Q2', '1.00', '17-Q3', '2.00', '17-Q4', '5.00', '18-Q1', '6.00'] list2=['17-Q2', '1', '17-Q3', '2', '17-Q4', '5', '18-Q1', '6'] for i in range(0, len(list1)-1, 2): result[list1[i]] = list2[i + 1] + '(' + list1[i+1] + ')' ;
En supposant que votre entrée soit la suivante:
from collections import OrderedDict final_dict = dict() i = 0 # Initializing the counter while (i<len(list1)): # Updating the final dict final_dict.update({list1[i]:str(list2[i+1]) + "(" + str(list1[i+1]) + ")"}) i += 2 # Incrementing by two in order to land on the alternative index # If u want sorted dictionary sorted_dict = OrderedDict(sorted(final_dict.items())) print (sorted_dict)
Et la sortie souhaitée comme suit:
result = {17-Q2: 1(1.00), 17-Q3: 2(2.00), 17-Q4: 5(5.00), 18-Q1: 6(6.00)}
Code suivant avec un seul La boucle while
pourrait aider:
list1 = ['17-Q2', '1.00', '17-Q3', '2.00', '17-Q4', '5.00', '18-Q1', '6.00'] list2 = ['17-Q2', '1', '17-Q3', '2', '17-Q4', '5', '18-Q1', '6']
Vous pouvez compresser
les deux listes, puis compresser
l'itérable résultant avec lui-même afin que vous puissiez l'itérer par paires pour construire le dict souhaité:
{'17-Q2': '1(1.00)', '17-Q3': '2(2.00)', '17-Q4': '5(5.00)', '18-Q1': '6(6.00)'}
résultat
devient:
i = zip(list1, list2) result = {k: '%s(%s)' % (v2, v1) for (k, _), (v1, v2) in zip(i, i)}
Vous pouvez utiliser zip
et dict
.
from itertools import zip_longest keys = ["a", "b", "c", "d"] values = ["A", "B", "C"] print(dict(zip_longest(keys, values))) # prints: {'a': 'A', 'b': 'B', 'c': 'C', 'd': None}
Cela fonctionne car dict
peut prendre une liste (ou n'importe quel itérateur) de tuples de (clé, valeur)
à créer. La fonction zip
permet de construire des tuples à partir de listes:
zip
renvoie un itérateur de tuples, où le i-ème tuple contient le i-ème élément de chacune des séquences d'arguments ou des itérables.
Notez que cela ne renverra qu'un dictionnaire qui associe la liste la plus courte (soit clés
ou valeur
) avec l'élément correspondant.
Si vous souhaitez avoir une valeur par défaut pour les éléments non appariés, vous pouvez toujours utiliser itertools.zip_longest
keys = ["a", "b", "c", "d"] values = ["A", "B", "C"] print(dict(zip(keys, values))) # prints: {'a': 'A', 'b': 'B', 'c': 'C'}
Vous pouvez également utiliser le paramètre de mot-clé zip_longest
fillvalue pour avoir autre chose que None
lorsque la valeur correspondante n'est pas trouvée.
D'un autre côté, si vous avez plus de valeurs que de clés, ceci Cela n'aurait pas beaucoup de sens car vous effaceriez la clé par défaut (à savoir fillvalue
) pour chaque élément manquant.
Les deux listes ont-elles la même longueur? Et votre résultat ne ressemble pas à un dictionnaire.