0

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

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':,dict1并且dict3有不同的键/值包含在方括号中。还要注意键/值布局是如何不同的dict1,键在andnumber之前url而不是之后,以及每个字典中的键名不同。dict2dict3

我有 3 个像这样的大字典,我需要通过每个 url 的位置来比较它们以进行评分。IE

if dict1[www.site.com index] > dict2[www.site.com index]: 
    dict1[www.site.com] score +1

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

4

1 回答 1

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
于 2012-07-06T22:57:43.113 回答