J'ai les dictionnaires suivants:
d1 = {"00f_5" :["AAA","AAC",3], "00f_6": ["CCC",2,3]}
Je voudrais la sortie suivante:
d1 = {"00f_5" :[1,2,3], "00f_6": [1,2,3]}
d2 = [{"marker":"00f_5",1: 'AAA'},{"marker":"00f_6", 1: 'CCC'},{"marker":"00f_5", 2:"AAC"}]
J'ai essayé plusieurs tentatives, mais je ne pouvait pas l'obtenir. Toute aide serait très appréciée.
3 Réponses :
Bien que je ne vous donne pas le programme complet, vous pouvez essayer de comprendre et de jouer avec le code suivant:
d2 = [{"marker":"00f_5",1: 'AAA'},{"marker":"00f_6", 1: 'CCC'},{"marker":"00f_5", 2:"AAC"}]
for d in d2:
for key, value in d.items():
if key == "marker":
marker = value
else:
reference = value
content = key
print("Marker: {}, Reference: {}, Content: {}".format(marker, reference, content))
Vous pouvez créer un dict qui mappe le marqueur à un sous-dict qui mappe les touches numériques aux codes à 3 lettres, de sorte que, étant donné un marqueur et une touche numérique, vous pouvez utiliser de sorte que donné: dict.get code > méthode pour obtenir le code mappé s'il existe: {'00f_5': ['AAA', 'AAC', 3], '00f_6': ['CCC', 2, 3]}
d1 = {"00f_5" :[1,2,3], "00f_6": [1,2,3]}
d2 = [{"marker":"00f_5",1: 'AAA'},{"marker":"00f_6", 1: 'CCC'},{"marker":"00f_5", 2:"AAC"}]
d1 sera devenir: d = {}
for s in d2:
d.setdefault(s['marker'], {}).update(s)
d1 = {k: [d[k].get(i, i) for i in l] for k, l in d1.items()}
Je ne suggérerais pas d'écraser le premier dict. Créez-en un nouveau ( d3 ).
Donné
d3 = {}
for d in lst:
key = d["marker"]
value = d1[key]
for k, v in d.items():
if not isinstance(k, int): # skip to numeric keys
continue
if key not in d3: # fill missing entries
d3[key] = value
idx = k - 1
d3[key][idx] = v # overwrite list item
d3
{'00f_5': ['AAA', 'AAC', 3], '00f_6': ['CCC', 2, 3]}
Code
d1 = {"00f_5" :[1,2,3], "00f_6": [1,2,3]}
lst = [
{"marker":"00f_5",1: 'AAA'},
{"marker":"00f_6", 1: 'CCC'},
{"marker":"00f_5", 2:"AAC"}
]
Veuillez publier ce que vous avez tenté jusqu'à présent et où avez-vous rencontré des problèmes. [SO]: Comment créer un exemple minimal, complet et vérifiable (mcve) .