J'ai 3 listes comme ci-dessous, qui sont extraites à partir d'un fichier PDF, et j'ai converti ces listes dans une liste de dictionnaires comme ci-dessous p> Y a-t-il un moyen de itération sur cette liste pour fusionner les clés et les valeurs basées sur ADID. Tels que p> ou existe un meilleur moyen de fusionner de telles données? P> P>
4 Réponses :
en utilisant ex: strong> p> sortie: strong> p> dict.setdefault code> et une simple itération. Vous pouvez également utiliser
Collection.defaultDict code>
Très appréciée! Ça marche. Question rapide est, la méthode "mise à jour" peut-elle automatiquement résumer les valeurs avec les mêmes clés? Dites, et s'il existe deux ou trois "frais de média" avec le même ADID dans la liste d'origine. Est-ce que cela résumera automatiquement toutes les valeurs?
Non, ce ne sera pas. Vous aurez utiliser une logique supplémentaire ou une utilisation collection.Counter code>
Vous pouvez essayer ceci.
{'9940542': {'Invalid Adjust(Platform Fee)': '-1.00', 'Invalid Adjust(Media Fee)': '-2.00'}, '10315065': {'Invalid Adjust(Platform Fee)': '-1.00', 'Invalid Adjust(Media Fee)': '-3.00'}, '11211744': {'Invalid Adjust(Platform Fee)': '-290.00', 'Invalid Adjust(Media Fee)': '-3403.00'}, '11309685': {'Invalid Adjust(Platform Fee)': '-57.00', 'Invalid Adjust(Media Fee)': '-670.00'}, '12103490': {'Media Fee': '709472.00', 'Platform Fee': '22703.00', 'Invalid Adjust(Platform Fee)': '-30.00', 'TrueView Budget Adjust (Platofrm Fee)': '-301.00', 'Invalid Adjust(Media Fee)': '-348.00', 'TrueView Budget Adjust (Media Fee)': '-9376.00'}, '12160150': {'Media Fee': '549173.00', 'Platform Fee': '17573.00'}}
Vous pouvez le faire avec 1 ligne de code utilisant Installation: python-benedict code>, c'est une sous-classe dict avec de nombreuses fonctionnalités et c'est
PIP Installation Python-Benedict Code> P>
from benedict import benedict as bdict
data_input= [
{'9940542': {'Invalid Adjust(Platform Fee)': '-1.00'}},
{'9940542': {'Invalid Adjust(Media Fee)': '-2.00'}},
{'10315065': {'Invalid Adjust(Platform Fee)': '-1.00'}},
{'10315065': {'Invalid Adjust(Media Fee)': '-3.00'}},
{'11211744': {'Invalid Adjust(Platform Fee)': '-290.00'}},
{'11211744': {'Invalid Adjust(Media Fee)': '-3403.00'}},
{'11309685': {'Invalid Adjust(Platform Fee)': '-57.00'}},
{'11309685': {'Invalid Adjust(Media Fee)': '-670.00'}},
{'12103490': {'Media Fee': '709472.00'}},
{'12103490': {'Platform Fee': '22703.00'}},
{'12103490': {'Invalid Adjust(Platform Fee)': '-30.00'}},
{'12103490': {'TrueView Budget Adjust (Platofrm Fee)': '-301.00'}},
{'12103490': {'Invalid Adjust(Media Fee)': '-348.00'}},
{'12103490': {'TrueView Budget Adjust (Media Fee)': '-9376.00'}},
{'12160150': {'Media Fee': '549173.00'}},
{'12160150': {'Platform Fee': '17573.00'}}
]
data_output = bdict()
data_output.merge(*data_input)
print(data_output.dump())
Pour l'enregistrement, une doublure. Ne pas utiliser dans le code de production (utilisez setingdefault code> comme dans @rakesh Réponse) strong>.
>>> {k1: {u: v for (k2, u, v) in zip(adID, description, spendItem) if k2 == k1} for k1 in set(adID)}
{'9940542': {'Invalid Adjust(Platform Fee)': '-1.00', 'Invalid Adjust(Media Fee)': '-2.00'}, '12103490': {'Media Fee': '709472.00', 'Platform Fee': '22703.00', 'Invalid Adjust(Platform Fee)': '-30.00', 'TrueView Budget Adjust (Platofrm Fee)': '-301.00', 'Invalid Adjust(Media Fee)': '-348.00', 'TrueView Budget Adjust (Media Fee)': '-9376.00'}, '12160150': {'Media Fee': '549173.00', 'Platform Fee': '17573.00'}, '10315065': {'Invalid Adjust(Platform Fee)': '-1.00', 'Invalid Adjust(Media Fee)': '-3.00'}, '11309685': {'Invalid Adjust(Platform Fee)': '-57.00', 'Invalid Adjust(Media Fee)': '-670.00'}, '11211744': {'Invalid Adjust(Platform Fee)': '-290.00', 'Invalid Adjust(Media Fee)': '-3403.00'}}
Oui, il y a plusieurs façons. Qu'avez-vous essayé et quel est le problème avec cela?