python - 从具有以相同值开头的键的字典中提取最大值
问题描述
我有这样的字典:
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
解决方案
您可以遍历字典项并保留一个单独的字典,用于保存该数字的当前最大键/值元组。您可以通过在 上拆分密钥来获得号码:
。一旦你有了最大值,你就可以通过 maxes 字典,拉出键(如果你愿意,可以排序)。
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']
推荐阅读
- c++ - 如何在C++中使用字符串和开关
- ansible - 如何设置 Ansible 额外变量来回答剧本中的暂停提示
- azure - 在创建资源时触发 Azure 逻辑应用
- android - 是否可以在视图模型中观察实时数据,而不使用切换映射(创建新的实时数据)?
- azure-devops - az devops 管道运行本地存储的 yaml 文件?
- python-3.x - Doubts on openpyxl, python3
- sql - 显示使用 T-SQL 查询关闭的工单
- bash - 搞砸了我的 bash_profile 和 bashrc 文件 - 重置为默认值?
- ios - 从 Swift 中的 NsDIctionary 获取价值
- mysql - 使用 Sequelize.js 的多年数据