[英]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
。
如果english
和german
具有相同的密钥集,则给定的解决方案非常好。 但是,如果您有任何部分集,请考虑:
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.