比较不同文件中的词典

2024-10-03 04:27:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题有点牵强,但我会尽可能清楚地表达出来

我有两个包含不同字典的python文件

在文件science.py中,字典的结果如下:

    dict1 = { "microbiome": {
                  "lang": "en",
                  "lemmatizer": "microbiome",
                  "Wikidata": "http://www.wikidata.org/entity/Q1330402"
                  "DBpedia": "http://dbpedia.org/resource/Microbiota"
          }, "teaching innovation": {
                 "lang": "en",
                 "lemmatizer": "innovación docente",
                 "Wikidata": null,
                 "DBpedia": null
              },
               ...... 
          }

本词典结构的内容构建在我调用的函数process (word)

compact.py文件的输出如下:

    dict2 = { http://dbpedia.org/resource/Microbiota :[
                 {'keyword': 'Microbiota', 'language': 'ca'}, 
                 {'keyword': 'Microbiota', 'language': 'en'}, 
                 {'keyword': 'Microbioma', 'language': 'es'}],
             'teaching innovation': [{'keyword': 'Semantics', 
                                     'language': 'en'},
                        {'keyword': 'Semàntica', 'language': 'ca'},
                        {'keyword': 'Semántica lingüística', 
                        'language': 'es'}],
            .... }

该词典结构的内容是通过一个名为query_kw (uri)的函数构建的,在该函数中,对DBpedia页面进行查询,以从uri获取单词的翻译。这将以字典的形式返回一个包含单词不同翻译的列表

dict2所示,它包含单词及其所在语言的翻译。我试图做的是检查来自dict1的单词是否在 dict2中找到。 在我上面的小例子中,你可以看到。如果我们看一下dict1一个字典键是“microbiome”,那么我必须检查它是否在 dict2的字典列表中。如果未按原样找到,则以与其他({'keyword': microbiome, 'language': 'en'})相同的方式将其添加到dict2列表中

那么结果必须是:

           dict2 = { http://dbpedia.org/resource/Microbiota :[
                        {'keyword': 'Microbiota', 'language': 'ca'}, 
                        {'keyword': 'Microbiota', 'language': 'en'}, 
                        {'keyword': 'Microbioma', 'language': 'es'},
                        {'keyword': 'microbiome', 'language': 'en'}],
                    'teaching innovation': [{'keyword': 'Semantics', 
                                          'language': 'en'},
                        {'keyword': 'Semàntica', 'language': 'ca'},
                        {'keyword': 'Semántica lingüística', 
                                     'language': 'es'}],
                        {'keyword': 'teaching innovation', 
                                     'language': 'en'}],
                 .... }

我尝试了以下几点(我知道这不是最好的,但我只是有一个想法​​我该怎么做):

wrapper = query_kw(uri)
res_keys = process(palabra)
for k in rest_keys.keys():
    wrap = {'keyword': rest_keys[k], 'language': rest_keys[k]['language']
    for ind in wrapper:
        for key, value in wrapper[ind]:
            for ky, v in wrap:  
                if key is not ky and value is not v:
                    wrapper.append(wrap)

我已经说过,它既不美观,也不是最优的,最重要的是它不能正常工作,但我想不出如何做到这一点。我希望我已经解释清楚了


Tags: orghttp字典eskeyslanguagekeywordca
1条回答
网友
1楼 · 发布于 2024-10-03 04:27:26

好的,我已经编写了这个简短的脚本,您可以运行完整的代码来验证它是否适用于您的问题中的示例

基本上,我使用dict理解,并使用DBpedia作为关联这两个词典的键

如果您有问题(如果这是您的意图),请告诉我

def merge_dicts(dict1, dict2):
    # Assuming every item on dict1 has a `DBpedia` key and a `lang` key
    new_items = {items['DBpedia']: [{'keyword': key, 'language': items['lang']}] for key, items in dict1.items()}
    for url, new_item_list in new_items.items():
        # Assuming every item on dict2 has the `DBpedia` url as keys
        for item in dict2[url]:
            found = False
            for new_item in new_item_list:
                if item['keyword'].strip().lower() == new_item['keyword'].strip().lower():
                    found = True
                    break
            if found:
                break
        if not found:
            dict2[url].append(new_item)

    return dict2

dict1 = { "microbiome": {
          "lang": "en",
          "lemmatizer": "microbiome",
          "Wikidata": "http://www.wikidata.org/entity/Q1330402",
          "DBpedia": "http://dbpedia.org/resource/Microbiota"
    }
}
        
dict2 = { 'http://dbpedia.org/resource/Microbiota' :[
     {'keyword': 'Microbiota', 'language': 'ca'}, 
     {'keyword': 'Microbiota', 'language': 'en'}, 
     {'keyword': 'Microbioma', 'language': 'es'}
     ]
     }

print(merge_dicts(dict1, dict2))

相关问题 更多 >