J'ai les dictionnaires suivants:
{'a': [550.0, 1.0, 550.0], 'b': [157.65, 150.0, 23648.64]}
Personale_result a été obtenu avec le code suivant:
defaultdict(<class 'list'>, {'a': [550.0, 1.0, 550.0], 'b': [157.65, 150.0, 23648.64]})
Je souhaite créer une nouvelle variable, appelée valeur_finale qui, pour chaque clé (en les faisant correspondre dans le dictionnaire), résume les trois dictionnaires en me donnant le résultat suivant:
from collections import defaultdict
personale_dip = {'a': [550.0], 'b': [157.65]}
personale_dip_costo = {'a': [1.0], 'b': [150.0]}
personale_result = {'a': 550.0, 'b': 23648.64}
data = defaultdict(list)
for d in [personale_dip, personale_dip_costo, personale_result]:
for k, v in d.items():
if isinstance(v, list):
data[k].extend(v)
else:
data[k].append(v)
3 Réponses :
RÉPONSE 2.0
>>> {'a': [550.0, 1.0, 550.0], 'b': [157.65, 150.0, 23648.64]}
SORTIE
personale_dip={'a': [550.0], 'b': [157.65]}
personale_dip_costo={'a': [1.0], 'b': [150.0]}
personale_result={'a': 550.0, 'b': 23648.64}
final_value = {}
for dictionary in [personale_dip, personale_dip_costo, personale_result]:
for k,v in dictionary.items():
# if the key is there, then
# check whether it a list or a normal string
# if list add it like [] + []
# if not then add it like [] + [v]
if k in final_value:
if isinstance(v, type([])): final_value[k] += v
else: final_value[k] += [v]
else:
if isinstance(v, type([])): final_value[k] = v
else: final_value[k] = [v]
print(final_value)
Ceci est modifié, et vous donne ce que vous voulez.
Eh bien, vous étiez sur la bonne voie. Personnellement, je les fusionnerais simplement:
>>> final_result
{'a': [550.0, 1.0, 550.0], 'b': [157.65, 150.0, 23647.5]}
Avec votre entrée, cela vous donnera:
final_value = {}
for key in personale_result:
final_value[key] = (personale_dip[key][0], personale_dip_costo[key][0], personal_result[key])
Désormais, personale_dip et personale_dip_costo sont de type {string , liste}. Actuellement, votre personale_result ignorera simplement les autres valeurs de cette liste, de même que final_result.
personale_dip = {'a': [550.0], 'b': [157.65]}
personale_dip_costo = {'a': [1.0], 'b': [150.0]}
personale_result = dict()
for key_pd in personale_dip:
if key_pd in personale_dip_costo.keys():
personale_result[key_pd] = [personale_dip[key_pd][0], personale_dip_costo[key_pd][0], personale_dip[key_pd][0]*personale_dip_costo[key_pd][0]]
This code should work considering the list inside the dict contains only 1 element. This will work even if personale_dip has more elements or vice versa.
what_you_want = dict (data.items ())? Un defaultdict est juste un dict avec du sucre en haut ... pourquoi ne pas garder le defaultdict?Hé, j'ai édité ma réponse, pouvez-vous vérifier si cela vous est utile :)