0
votes

Cartographie des valeurs de 2 dictionnaires Python dans 1 nouvelle liste de dictionnaires

J'ai 2 dictionnaires avec différentes traductions comme ceci: xxx pré>

Je voudrais créer une nouvelle liste de dictionnaires en dehors d'eux qui ressembleraient à ceci: p>

bad_translations = []
lang = ['EN', 'DE']
uk = lang[0]
de = lang[1]
for k,v in english.items():
    for kk, vv in german.items():
        emb = {}
        emb[uk]  = v
        emb[de] = vv
    bad_translations.append(emb)    


0 commentaires

3 Réponses :


1
votes

Vous êtes itération à travers allemand.items () code>, mais en réalité, ils doivent être liés, car les deux dictionnaires ont les mêmes clés.

à la place, vous pourriez faire P>

for k,v in english.items():
    emb = {}
    emb[uk]  = v
    emb[de] = german[k]
    bad_translations.append(emb)  


5 commentaires

Mais cela ne produira pas les résultats exacts comme ce que la puissance est posée. Oui, les 2 dictionnaires partagent le même k mais si vous utilisez uniquement un dictionnaire, c'est-à-dire anglais Vous n'obtiendrez que c'est v , à utiliser Allemand [k] Vous devez faire référence au dictionnaire allemand quelque part.


Merci @danny! Qu'est-ce qui fonctionnerait si ces clés sont différentes dans certains cas?


Si vous avez des clés différentes, vous devez faire plus de travail. Vous voudrez peut-être également reconsidérer la partie "touche" de votre traduction. Sont "Word1" et "Word2" sont censés être des mots anglais? Si oui, le dict allemand déjà un dictionnaire de traductions? La question complète n'a pas vraiment de sens si ces clés sont différentes.


@FishingCode S'il existe des touches k dans allemand qui ne sont pas dans anglais , il n'y a pas de traduction et de la même manière vice versa. C'est jusqu'à OP pour déterminer ce qui devrait être fait dans ces cas. Si les deux dict ont le même ensemble de clés, tout va bien. Le code d'origine de l'OP n'essaie pas de résoudre ce problème, et ma réponse ne fait donc pas non plus


@FishingCode Je ne suis pas sûr de comprendre. Ma solution produit la sortie correcte en supposant anglais.Keys () == allemand.keys () , mais c'est le meilleur que nous puissions faire à moins que OP fournit plus d'informations. Où suis-je mal compris votre question?



0
votes

Essayez ceci: xxx

pour chaque mot anglais, il crée un dictionnaire avec une touche comme 'fr' , avec le mot à partir de anglais < / code> et une autre clé comme 'de' avec sa valeur dans allemand . Ce dictionnaire est ajouté à traductions .


2 commentaires

Merci @ lionrocker221! Cela fonctionne dans les cas où j'ai exactement les mêmes clés. Dans certains cas, les clés sont différentes, par exemple "Café" et "Café". Quelle serait la meilleure solution pour cela?


@ AZ43 Par exemple, si une clé dans anglais est "CAFE" et dans allemand c'est "CAFÉ" ?



-1
votes

Les solutions données sont excellentes si anglais code> et allemand code> ont le même ensemble de clés. Cependant, si vous avez des ensembles partiels, considérons:

combined = {}
for k in set(english.keys()).union(german.keys()):
    if k in english:
        combined.setdefault(k, {})['EN'] = english[k]
    if k in german:
        combined.setdefault(k, {})['DE'] = german[k]


1 commentaires

Merci@adam! Vient d'essayer votre solution. Dans certains cas, mes clés sont différentes, par ex. "Café" et "Café". Quelle serait la meilleure solution pour cela?