1
votes

Ajouter le dictionnaire dans une boucle for

Je voudrais ajouter un dictionnaire dans une boucle for pour obtenir un dictionnaire concaténé. De plus, il n'est pas nécessaire que les clés de tous les dictionnaires soient exactement les mêmes.

Pour eq

 emptydict={}

   for x in z:
      newdict=x.dict()
      emptydict.append(newdict)
      print(emptydict)

Sortie:

combined={'a':['2','3.4','1.2'],'b':'4','c':['t','7.6','3.4'],
                'd':'2.3'}

À présent à la question d'origine:

Chaque fois qu'une boucle for est itérée, un dictionnaire sera généré et je voudrais l'ajouter.

Quelque chose comme:

 one={'a': '2', 'c': 't', 'b': '4'}
 two={'a': '3.4', 'c': '7.6'}
 three={'a': 1.2, 'c': 3.4, 'd': '2.3'}


1 commentaires

Pseudo code: vous devez parcourir les clés de creux de newdict et rechercher et ajouter à combiné [thiskey], pas à combiné.


4 Réponses :


2
votes

Vous pouvez essayer quelque chose comme ceci.

one = {'a': '2', 'c': 't', 'b': '4'}
two = {'a': '3.4', 'c': '7.6'}
three = {'a': 1.2, 'c': 3.4, 'd': '2.3'}

new_dict = {}
list_dict = [one, two, three]

for d in list_dict:
    for key in d:
        if key not in new_dict:
            new_dict[key] = []
        new_dict[key].append(d[key])

print(new_dict)

Sortie : {'a': ['2', '3.4', 1.2], 'c': ['t', '7.6', 3.4], 'b': ['4'], 'd': ['2.3']}


0 commentaires

1
votes

Vous pouvez essayer la compréhension de dictée et la compréhension de la liste:

new_dict =  a = {k : [j[k] for j in [one,two,three] if k in j][0] if len([j[k] for j in [one,two,three] if k in j]) ==1 else [j[k] for j in [one,two,three] if k in j] for k in set(list(one.keys())+list(two.keys())+list(three.keys()))}
# Output : {'a': ['2', '3.4', 1.2], 'b': '4', 'c': ['t', '7.6', 3.4], 'd': '2.3'}

Si vous voulez que les clés avec un seul élément comme valeur possible ne soient pas dans la liste, essayez ceci:

XXX


0 commentaires

2
votes

essayez ceci

{'a': ['2', '3.4', 1.2],
 'b': ['4', nan, nan],
 'c': ['t', '7.6', 3.4],
 'd': [nan, nan, '2.3']}

Sortie

 one={'a': '2', 'c': 't', 'b': '4'}
 two={'a': '3.4', 'c': '7.6'}
 three={'a': 1.2, 'c': 3.4, 'd': '2.3'}

df = pd.DataFrame([one,two,three])

     a    b    c    d
0    2    4    t  NaN
1  3.4  NaN  7.6  NaN
2  1.2  NaN  3.4  2.3

df.to_dict(orient='list')


0 commentaires

1
votes

J'ai utilisé vos exemples pour le faire -

{'a': ['2', '3.4', 1.2], 'c': ['t', '7.6', 3.4], 'b': ['4'], 'd': ['2.3']}

O / P -

one = {'a': '2', 'c': 't', 'b': '4'}
two = {'a': '3.4', 'c': '7.6'}
three = {'a': 1.2, 'c': 3.4, 'd': '2.3'}
dicts = [one, two, three]
for dictionary in dicts:
    for key, value in dictionary.items():
        try:
            new[key].append(value)
        except KeyError:
            new[key] = [value]


0 commentaires