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':dict1dict3dict1numberurldict2dict3

このような 3 つの大きな辞書があり、スコアリングのために各 URL の位置でそれらを比較する必要があります。すなわち

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 に答える