[英]How can I merge two lists of dicts in python with potentially different key-value pairs?
[英]How to create a dictionnary whose key:value pairs are the values of two different lists of dictionnaries?
我有 2 个由 pymongo 提取产生的字典列表。
包含 id(字符串)和引理(字符串)的字典列表:
lemmas = [{'id': 'id1', 'lemma': 'lemma1'}, {'id': 'id2', 'lemma': 'lemma2'}, {'id': 'id3', 'lemma': 'lemma3'}, ...]
包含 id 和每个 id 多个单词的字典列表:
words = [{'id': 'id1', 'word': 'word1.1'}, {'id': 'id1', 'word': 'word1.2'}, {'id': 'id2', 'word': 'word2.1'}, {'id': 'id3', 'word': 'word3.1'}, {'id': 'id3', 'word': 'word3.2'}, ...]
如您所见,两个字典列表的长度不同,因为每个 id 有多个单词关联,但只有一个引理。
我的目标是获得一个字典,其键:值对对应于具有相同 id 的单词和引理的 word:lemma 值。 这样,我可以替换我正在分析的文本中相应引理的每个单词。 例如:
word_lemma_dict = {'word1.1': 'lemma1', 'word1.2': 'lemma1', 'word2.1': 'lemma2', 'word3.1': 'lemma3'; 'word3.2': 'lemma3', ...}
有没有一种简单的方法可以做到这一点?
我能做到的最好的事情是使用 2 个 for 循环,但它不是很“pythonistic”:
id_lemma_dict = {}
word_lemma_dict = {}
for dico in lemmas:
id_lemma_dict[dico['id']] = dico['lemma'] # create id:lemma dict from list of dicts
for dico in words:
word_lemma_dict[dico['word']] = id_lemma_dict[dico['id']]
print(word_lemma_dict)
这是一个带有理解的选项:
lemmas = [{"id": "id1", "lemma":"lemma1"}, {"id": "id2", "lemma":"lemma2"}, {"id": "id3", "lemma": "lemma3"}]
words = [{"id": "id1", "word": "word1.1"}, {"id": "id1", "word": "word1.2"}, {"id": "id2", "word": "word2.1"}, {"id": "id3", "word": "word3.1"}, {"id": "id3", "word": "word3.2"}]
lemmas_dict = {item["id"]: item["lemma"] for item in lemmas}
word_to_lemma = {word['word']: lemmas_dict[word['id']] for word in words}
print(word_to_lemma)
输出:
{'word1.1': 'lemma1', 'word1.2': 'lemma1', 'word2.1': 'lemma2', 'word3.1': 'lemma3', 'word3.2': 'lemma3'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.