首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个python字典的值映射为一个新的字典列表

将两个python字典的值映射为一个新的字典列表
EN

Stack Overflow用户
提问于 2020-07-30 20:28:58
回答 3查看 42关注 0票数 0

我有两本字典,都有这样的翻译:

代码语言:javascript
复制
english = {"word1": 'english_word1', "word2": "english_word2"}
german = {"word1": "german_word1", "word2": "german_word2"}

我想从这些词典中构建一个新的字典列表,如下所示:

代码语言:javascript
复制
translations = [{'EN': 'english_word1', 'DE': 'german_word1'},
 {'EN': 'english_word2', 'DE': 'german_word2'}]

使用我的代码,我不会在任何地方获得german_word1,而是获得german_word2两次。这是我目前的结果:

代码语言:javascript
复制
bad_translations = [{'EN': 'english_word1', 'DE': 'german_word2'},
 {'EN': 'english_word2', 'DE': 'german_word2'}]

我使用的代码:

代码语言:javascript
复制
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)    

为了得到正确的映射,我应该更改什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-30 20:35:36

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

相反你可能会这么做

代码语言:javascript
复制
for k,v in english.items():
    emb = {}
    emb[uk]  = v
    emb[de] = german[k]
    bad_translations.append(emb)  

因此,对于每一个具有k键的英语单词,您都可以找到相同键的匹配德语单词。

票数 1
EN

Stack Overflow用户

发布于 2020-07-30 20:45:12

试试这个:

代码语言:javascript
复制
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之后。

票数 0
EN

Stack Overflow用户

发布于 2020-07-30 20:51:42

如果englishgerman有相同的密钥集,那么所给出的解决方案是很好的。但是,如果有任何部分集,请考虑:

代码语言:javascript
复制
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'}}),但是变得更容易阅读和推理。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63180919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档