0
votes

Comment puis-je combiner une liste de dictes à une liste de dicts combinant des clés similaires

Je veux prendre cette entrée: xxx pré>

et atteindre cette sortie souhaitée: p> xxx pré>

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']}]


2 commentaires

Ê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.


3 Réponses :


1
votes

Une option serait de créer un seul dictionnaire puis de la casser en paires de la valeur de clé unique après: xxx


0 commentaires

1
votes

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))
    ]


1 commentaires

Thx kaya3, j'aime ces solutions iTerTools, je n'ai pas pensé à la chaîne



2
votes

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']}


0 commentaires