我有这样的字典:
Counter({'3:C': 22500, '4:G': 21096, '1:D': 20778, '0:F': 18400, '7:H': 10788, '8:E': 9160, '8:H': 8137,
'7:E': 5259, '8:D': 4690, '1:E':4063, '6:A': 3592, '1:H': 2840, '10:G': 2689, '0:A': 2437, '6:F': 2436,
'8:C': 2435, '4:B': 1643, '7:D': 1588, '7:I': 1508, '7:J': 1390, '
3:A': 1314, '6:I': 1183, '8:J': 1177, '6:J': 948, '8:I': 750, '10:B':
677, '2:I': 470, '1:A': 406, '1:J': 360, '6:H': 317, '6:E': 97})
我需要为键以相同数字开头的值提取最大值。例如,如果我有“ 3:C”:22500和“ 3:A”:1314,则我需要获取“ 3:C”,因为该组合出现的次数更多,并且对于所有其他值而言都是这样。我该怎么办?我的预期输出是:
0:F
1:D
2:I
3:C
4:G
6:A
8:E
7:H
10:B
问题来源:stackoverflow
您可以遍历字典项并为其保留单独的字典,该字典包含该数字的当前最大键/值元组。通过拆分:
上的键可以得到数字。获得最大限制后,就可以检查最大限制,拉出键(如果需要,可以排序)。
counts = Counter({'3:C': 22500, '4:G': 21096, '1:D': 20778, '0:F': 18400, '7:H': 10788, '8:E': 9160, '8:H': 8137,
'7:E': 5259, '8:D': 4690, '1:E':4063, '6:A': 3592, '1:H': 2840, '10:G': 2689, '0:A': 2437, '6:F': 2436,
'8:C': 2435, '4:B': 1643, '7:D': 1588, '7:I': 1508, '7:J': 1390, '3:A': 1314, '6:I': 1183, '8:J': 1177, '6:J': 948, '8:I': 750, '10:B':677, '2:I': 470, '1:A': 406, '1:J': 360, '6:H': 317, '6:E': 97})
maxes = dict()
for k, v in counts.items():
n, l = k.split(":")
if n not in maxes or v > maxes[n][1]:
maxes[n] = (k, v)
# maxes is a dict like:
# {'3': ('3:C', 22500), '4': (...}
sorted((k for k, v in maxes.values()), key=lambda x: int(x.split(':')[0]))
# ['0:F', '1:D', '2:I', '3:C', '4:G', '6:A', '7:H', '8:E', '10:G']
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。