繁体   English   中英

如何创建一个字典,其键:值对是两个不同字典列表的值?

[英]How to create a dictionnary whose key:value pairs are the values of two different lists of dictionnaries?

我有 2 个由 py​​mongo 提取产生的字典列表。

包含 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.

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