繁体   English   中英

将 2 个 python 词典的值映射到 1 个新的词典列表

[英]Mapping values of 2 python dictionaries into 1 new list of dictionaries

我有 2 部字典,其中包含各种翻译,如下所示:

english = {"word1": 'english_word1', "word2": "english_word2"}
german = {"word1": "german_word1", "word2": "german_word2"}

我想从中建立一个新的字典列表,如下所示:

translations = [{'EN': 'english_word1', 'DE': 'german_word1'},
 {'EN': 'english_word2', 'DE': 'german_word2'}]

使用我拥有的代码,我没有在任何地方获得German_word1 ,而是两次获得German_word2 这是我目前的结果:

bad_translations = [{'EN': 'english_word1', 'DE': 'german_word2'},
 {'EN': 'english_word2', 'DE': 'german_word2'}]

我使用的代码:

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)    

我应该更改什么才能正确获取映射?

您正在遍历german.items() ,但实际上它们应该是相关的,因为两个字典具有相同的键。

相反,您可能会这样做

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

这样对于每个带有键k的英语单词,您都会找到具有相同键的匹配德语单词。

尝试这个:

english = {"word1": 'english_word1', "word2": "english_word2"}
german = {"word1": "german_word1", "word2": "german_word2"}

lang = ['EN', 'DE']
uk = lang[0]
de = lang[1]


translations = []

for key, word in english.items():
    trans = {uk: english[key], de: german[key]}

    translations.append(trans)

print(translations)

对于每个英语单词,它都会创建一个字典,其中一个键为'EN' ,单词来自english ,另一个键为'DE' ,其值为german 这本词典附加到translations

如果englishgerman具有相同的密钥集,则给定的解决方案非常好。 但是,如果您有任何部分集,请考虑:

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]

请注意,这会稍微改变您的数据结构(您最终会得到{'word1': {'EN': 'english_word1', 'DE': "german_word1'}} )但变得更容易阅读和推理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM