Je veux prendre cette entrée: et atteindre cette sortie souhaitée: p> ma tentative était la suivante, mais c'est ne correspondant pas à la sortie souhaitée. Toute aide ici est appréciée. THX. P> temp = list(zip([*map(lambda d: next(iter(d.keys())), mycounter)], [*map(lambda d: next(iter(d.values())), mycounter)]))
c = collections.defaultdict(list)
for a,b in temp:
c[a].extend(b)
final = [dict(c)]
# Close, but not quite the desired output since it's should be two dict objects, not one
# [{6: ['Credit card'], 2: ['Debit card', 'Check']}]
3 Réponses :
Une option serait de créer un seul dictionnaire puis de la casser en paires de la valeur de clé unique après:
Ceci est très similaire à Une autre question ; La seule différence est que vous souhaitez que chaque paire de clé / valeur dans son propre dictionnaire. Voici une solution adaptée utilisant des compréhensions et iTERTOOLS:
from itertools import chain
def merge_dicts(*dicts):
return [
{ k: list(chain.from_iterable( d[k] for d in dicts if k in d )) }
for k in set(chain.from_iterable(dicts))
]
Thx kaya3, j'aime ces solutions iTerTools, je n'ai pas pensé à la chaîne
Pour des options offertes, voici une version alternative qui utilise defaultDict, que je trouve plus facile à utiliser, en particulier à mesure que la complexité augmente:
In : dict(result)
Out: {6: ['Credit card'], 2: ['Debit card', 'Check']}
Êtes-vous sûr de vouloir que la sortie ait des dictionnaires individuels, plutôt que toutes les clés ensemble dans un dictionnaire? Je ne peux pas imaginer pourquoi vous voudriez une liste de dictionnaires avec une clé chacune.
Je n'ai pas besoin d'eux de cette façon, je voulais juste connaître le meilleur moyen d'accomplir la tâche. J'avais du mal à comprendre comment répondre à une autre question et j'ai été bloquée ici et je voulais savoir comment réparer ce qui me soulevait.