我有两本字典,都有这样的翻译:
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) 为了得到正确的映射,我应该更改什么?
发布于 2020-07-30 20:35:36
您正在遍历german.items(),但实际上它们应该是相关的,因为两个字典都有相同的键。
相反你可能会这么做
for k,v in english.items():
emb = {}
emb[uk] = v
emb[de] = german[k]
bad_translations.append(emb) 因此,对于每一个具有k键的英语单词,您都可以找到相同键的匹配德语单词。
发布于 2020-07-30 20:45:12
试试这个:
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之后。
发布于 2020-07-30 20:51:42
如果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'}}),但是变得更容易阅读和推理。
https://stackoverflow.com/questions/63180919
复制相似问题