开发者社区> 问答> 正文

使用以相同值开头的键从字典中提取最大值

我有这样的字典:

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

展开
收起
is大龙 2020-03-23 17:15:10 562 0
1 条回答
写回答
取消 提交回答
  • 您可以遍历字典项并为其保留单独的字典,该字典包含该数字的当前最大键/值元组。通过拆分上的键可以得到数字。获得最大限制后,就可以检查最大限制,拉出键(如果需要,可以排序)。

    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

    2020-03-23 17:15:17
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载