我有一个字典如下:
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)
感谢。
答案 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)}