比较不同python词典的不同键和键的值。结构

时间:2012-07-06 22:53:58

标签: python dictionary comparison

这更像是一个理论问题。我有3个字典,它们具有不同的结构/键,但值可能相同。 E.g。

dict1 = {u'd':{u'results':[{u'number':'1', u'dispURL':u'www.site.com'},
                          {u'number':u'2', u'dispURL':u'www.othersite.com'}]
              }}

dict2 = {u'result_page':{u'url':u'www.greatsite.com', u'pos':u'1'},
                        {u'url':u'www.site.com', u'pos':u'2'}}

dict3 = {u'hits':[{u'displayurl':u'www.othersite.com', u'index':u'1'},
                  {u'displayurl':u'www.site.com', u'index':u'2'}]
        }

请注意dict1 {u'd':之前{u'results':的{​​{1}} dict1dict3dict1的方括号中是否包含不同的键/值。另请注意number中{/ 1}}的键/值布局如何与url之前的dict2密钥相同,而不是像dict3if dict1[www.site.com index] > dict2[www.site.com index]: dict1[www.site.com] score +1 之类的那样。以及每个字典中的关键名称都不同。

我有3个这样的大型词典,我需要根据每个网址的位置来比较它们以进行评分。即

{{1}}

我知道代码段不正确只是为了说明。我想知道的是我需要对字典做些什么才能进行这样的比较?我正在考虑从每个字典中获取所需的数据,并将它们放入3个具有统一键和结构的新词典中,甚至是1个新词典。但我的程序必须在计算上非常快,所以我不知道这将如何影响它。你们中任何一位经验丰富的python程序员都希望对此有发言权吗?

1 个答案:

答案 0 :(得分:2)

解决此问题的最有效方法是将您的数据转换为规范{url:value}格式。

例如:

dict1 = {data[u'dispURL']:int(data[u'number'])   for data in dict1[u'd'][u'results']}
dict2 = {data[u'url']:int(data[u'pos'])          for data in dict2[u'result_page']}
dict3 = {data[u'displayurl']:int(data[u'index']) for data in dict3[u'hits']}

现在看起来像

dict1 = {u'www.othersite.com': 2, u'www.site.com': 1}
dict2 = {u'www.greatsite.com': 1, u'www.site.com': 2}
dict3 = {u'www.othersite.com': 1, u'www.site.com': 2}

,您的比较看起来像

for url in dict1:
    if dict1[url] > dict2[url]:
        # do something