2012-07-06 52 views
0

这是比什么理论问题的不同Python字典的值。我有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'results':之前有{u'd':,也dict1dict3有括在方括号中的不同的键/值。同样要注意的键/值的布局与urlnumber键来代替后像dict2dict3,以及键名是在每个字典不同的dict1不同。

我有3个大的字典是这样,我需要每个URL以达到得分目的的位置对他们进行比较。即

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

我知道代码片段不正确,它只是为了说明。我想知道的是,我需要做什么来使字典能够执行这样的比较?我正在考虑从每本词典中提取所需的数据,并将它们放入3本统一密钥和结构的新词典中,甚至还有1本新词典。但是我的程序必须计算速度很快,所以我不知道这会对它产生什么影响。你们任何一位更有经验的Python程序员都想对此发表意见吗?

回答

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 
+1

能否请您详述了这点有点休?我不确定你的意思。 – adohertyd 2012-07-06 22:59:51

+0

非常感谢Hugh正是我想要的。当你知道这些小技巧时,Python让生活变得如此简单! – adohertyd 2012-07-06 23:10:58