2012-07-06 77 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