Python:通过其tupled-key返回dict的最大值

时间:2011-03-31 09:52:03

标签: python dictionary max tuples

我有一个字典如下:

counts = {('test1', 'alpha'): 2, 
          ('test2', 'beta'): 1, 
          ('test1', 'delta'): 1, 
          ('test2', 'gamma'): 2}

如何返回具有最大值的每个元组的'alpha / beta / gamma / delta'?

test1,alpha,2#因为test1的'alpha'为最高值

test2,gamma,2#因为test2的'gamma'为最高值

这会有用吗?

maxDict={}
for (eachtest,pattern), counter in counts.items():
    maxDict[eachtest,pattern] = max(maxDict.get(eachtest,0),counter)

感谢。

2 个答案:

答案 0 :(得分:2)

首先,转换你的dict以将测试名称映射到(count, pattern)元组的列表:

counts2 = collections.defaultdict(list)
for (test, pattern), c in counts.iteritems():
    counts2[test] += (c, pattern)

现在你可以很容易地获得最大值:

for test, patterns in counts2.iteritems():
    print test, max(patterns)

答案 1 :(得分:1)

你几乎是对的。您只需要使用测试名称索引字典,并记住模式名称及其值作为字典值。在我看来,使用max在我看来有点矫枉过正。更简单的代码也可以工作并且更具可读性:

maxDict = {}
for (eachtest, pattern), counter in counts.iteritems():
    _, prev_max = maxDict.get(eachtest, ('', 0))
    if counter > prev_max:
        maxDict[eachtest] = (pattern, counter)

print maxDict
# prints: {'test1': ('alpha', 2), 'test2': ('gamma', 2)}