簡體   English   中英

如何根據元組的第一個參數從字典中的元組中檢索最大鍵和對應的值

[英]How to retrieve max key and corresponding value from the tuple in the dictionary based on the first argument of the tuple

例如,如果給定的字典如下:

dic = {('K1', 'S1'): 4.999997655759467, 
       ('k1', 'K2'): 6.1999036349232375, 
       ('K1', 'K4'): 7.999999999999876, 
       ('K2', 'K1'): 6.199940422452897, 
       ('K2', 'K3'): 7.999999999999876, 
       ('K2', 'K5'): 6.199962763954776, 
       ('K3', 'K2'): 6.199997321675397, 
       ('K3', 'K6'): 7.999998023783301, 
       ('K3', 'S2'): 9.999999999999911, 
       ('K4', 'S1'): 9.999999999999911, 
       ('K4', 'K1'): 6.199999975663285, 
       ('K4', 'K5'): 6.19999999303405, 
       ('K5', 'K2'): 6.199989058277423, 
       ('K5', 'K4'): 7.999999999999876, 
       ('K5', 'K6'): 7.999950953156936, 
       ('K6', 'S2'): 9.999999999999911, 
       ('K6', 'K3'): 7.999641214892367, 
       ('K6', 'K5'): 6.19980050493078}

而所需的output如下:

{('K1', 'K4'): 7.999999999999876,
 ('K2', 'K3'): 7.999999999999876,
 ('K3', 'S2'): 9.999999999999911,
 ('K4', 'S1'): 9.999999999999911,
 ('K5', 'K4'): 7.999999999999876,
 ('K6', 'S2'): 9.999999999999911}

我實現了下面的function,可惜只能獲取value,並沒有獲取到對應的key。

def getMaxForX(number):
    return max([v for k, v in dic.items() if k[0] == number])

我不完全理解字典的最大鍵和值的概念?

請建議我如何解決這個問題。

我猜你只是附加值(v)而不是鍵(k)。 所以更新你的return邏輯

return max([k, v for k, v in Q_values.items() if k[0] == number])

所以你想按鍵的第一個元素( K1, K2, K3, ... )進行分組,然后根據值找到每個組的最大值:

>>> from itertools import groupby
>>> sortkey = lambda i: i[0][0].lower()
>>> groups = groupby(sorted(dic.items(), key=sortkey), key=sortkey)
>>> result = dict(max(v, key=lambda i: i[1]) for k, v in groups)
>>> result
{('K1', 'K4'): 7.999999999999876, ('K2', 'K3'): 7.999999999999876, ('K3', 'S2'): 9.999999999999911, ('K4', 'S1'): 9.999999999999911, ('K5', 'K4'): 7.999999999999876, ('K6', 'S2'): 9.999999999999911}

注意:我在分組時使用了sortkey鍵,因為您的示例中的一個鍵具有不同的大小寫。 如果這只是一個錯字,你可以省略它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM