2017-03-31 125 views
0

我試圖從列表字典中返回所有最大值。查找列表字典的多個最大值

my_dict = { 111: [50, 2, 34], 122: [50 , 4, 45], 133: [40, 1, 12], 144: [20, 5, 7]} 

maxima = max(my_dict.items(), key=operator.itemgetter(1))[0] 

這隻返回'122',而不是'111'和'122'。我怎樣才能修改這個來返回兩個鍵?

+0

雖然這不是答案,列表,元組等進行比較**按字典順序**。 –

回答

1

我想也許這就是你想要的?這也跟蹤my_dict中每個鍵的最大值。

maxima = {} 
my_dict = { 111: [50, 2, 34], 122: [50 , 4, 45], 133: [40, 1, 12], 144: [20, 5, 7]} 

for key in my_dict: 
    maxima[key] = max(my_dict[key]) 

max_keys = [key for key in maxima if maxima[key] == max(maxima.values())] 
print max_keys 
0

要根據列表中的項目的最高你可以做排序列表:

print(sorted(my_dict.keys(),key=lambda x: max(my_dict[x]))) 

你得到[144, 133, 122, 111]但不會告訴你哪些鍵承擔其相關聯的最高值名單。

所以,你必須執行,在2步:在列表中

  • 提取匹配包含這個值
  • 這樣的實例列表鍵的所有值的

    • 計算最大值:

      my_dict = { 111: [50, 2, 34], 122: [50 , 4, 45], 133: [40, 1, 12], 144: [20, 5, 7]} 
      
      max_value = max(x for l in my_dict.values() for x in l) # flat max of values 
      

      或者如果你想計算一個特定的最大值R值給出其位置,例如第一個:

      max_value = max(l[0] for l in my_dict.values()) 
      

      然後從字典中提取與過濾器:

      print([k for k,v in my_dict.items() if max_value in v]) # keys whose value contain the max 
      

      結果:

      [122, 111] 
      
    +0

    是的,這很有用,謝謝。我意識到我有一本不正確的字典。我正在努力關注列表中的第一個值,而不是任何數字。上面的情況,什麼都不是> 50,所以不是問題。你能指點我的方向來學習如何專注於列表中的特定值嗎? – Detterman

    +0

    這種方式更簡單。檢查我的編輯。 –

    +0

    再次感謝您。你知道我可以用來學習這些知識嗎?這仍然有點凌駕於我的頭上。這是我需要生成一個原型的代碼的最後一步,並且我被困了一段時間。 – Detterman