2015-09-27 114 views
0

我有一個dictionairy是建設成爲Python的字典排序基於兩個值的字典

>> dict = {'foo':[20,15],'bar':[10,5],'is':[35,3],'a':[20,10],'word':[50,1]} 

我想找到具有最高列表[0]值和最低值[1,3鍵]。(或者它的一個近似值),但它給了我一個總BRAINFREEZE

所以在這個例子中所期望的結果將是

>> 'word':[50,1] 

有人建議我應該更清楚地界定我PARAMATERS:右現在我期待,只要第二個值仍低於5

感謝您抽出時間來閱讀問題

+2

我不認爲您提供了足夠的信息。如果你有這樣的字典,應該返回哪個元素:'dict = {'foo':[20,1],'word':[50,10]}'? – zanderle

+0

很難說,因爲它關於相對差異,第一個值越高(語料庫中的單詞),第二個數值(與單詞有關的文檔)就越高。最終的目標是尋找具有最低[0]和最低[1]的結果..抱歉不清楚。我想我會得到最高數量的任一(或相對距離最高),然後手動選擇一個 –

+0

您可能想探索SO問題[我如何根據Python中的字典值對字典列表排序? ](http://stackoverflow.com/q/72899/2823755)和提供的答案。並看看[排序如何維基](https://wiki.python.org/moin/HowTo/Sorting)。 – wwii

回答

2

可以使用max功能從[0]值打印前10名成績最高合適的按鍵功能:

>>> max(dict.items(),key=lambda x: (x[1][0],-x[1][1])) 
('word', [50, 1]) 

注意,在這種情況下x[1][0](最大值)的優先級高於第二多一個,所以對於一些字典像以下:

>>> dict = { 'foo': [35,5], 'word': [60, 25]} 

它將回報:

>>> dict = { 'foo': [70,5], 'word': [68,1]} 
>>> max(dict.items(),key=lambda x: (x[1][0]-x[1][1])) 
('word', [68, 1]) 
+0

首先,感謝您花時間回答問題。我沒有完全理解max(dict.items(),key = lambda x:(x [1] [0] -x [1] [1]))是如何工作的。當我在我的語料庫上運行它時,它返回相同的數字(我認爲它有最低的相對距離) –

+1

@按下按鈕 - 查看'''max'''的文檔 - 您可以編寫任何函數來返回您感興趣的項目並將其用作[key函數](https://wiki.python.org/moin/HowTo/Sorting)作爲''''''''',關鍵函數可以用於幾個Python內置函數,比如'''''''''其他標準庫函數.. – wwii

+0

@wwii會給它一個讀,謝謝。 (它看起來非常方便) –

0

嘗試用下面的代碼:

('word', [60, 25]) 

您還可以根據值的差(這似乎更接近你想要什麼)得到物品。我不確定它是否滿足您的所有情況

dict = {'a': [20, 10], 'word': [50, 1], 'is': [35, 3], 'foo': [20, 15], 'bar': [10, 5]} 

    value = max(dict.values()) 
    b = value[1] 
    for each in dict.values(): 
     if value[0] == each[0] and each[1] < b: 
      value = each 

    print (dict.keys()[dict.values().index(value)],value) 
+0

嘿,首先謝謝你的回答。我試圖運行你的答案(在我的程序中字典命名爲'vergelijkdict')如果我將它運行爲:'value = max(vergelijkdict。值()) B =值[1] 爲每個在vergelijkdict.values(): 如果值[0] ==各[0],並且每個[1]

+0

我認爲你使用的是python 3x。在python 3中,dict.values(),dict.keys(),dict.items()返回視圖,而不是列表。嘗試像列表(dict.values())和列表(dict.keys())在所有可能的地方。 – Vineesh