为了账号安全,请及时绑定邮箱和手机立即绑定

使用占位符对字典键组进行计数

使用占位符对字典键组进行计数

HUWWW 2022-09-20 15:31:33
字典由行列键组成。某些行只有一列 (r1c1),而其他行具有更多列 (r5c1,r5c2,r5c3...)。我想计算每行的键(以及列)。row_dic = {'r1c1': (680, 155, 591, 12), 'r2c1': (679, 195, 592, 12), 'r3c1': (682, 241, 587, 11), 'r3c2': (1542, 252, 179, 30), 'r4c1': (1541, 289, 180, 49), 'r5c1': (455, 344, 226, 18), 'r5c2': (688, 345, 573, 17), 'r5c3': (1268, 345, 265, 18), 'r5c4': (1541, 345, 180, 18), 'r6c1': (454, 370, 227, 17), 'r6c2': (688, 370, 573, 18), 'r6c3': (1268, 370, 264, 18), 'r6c4': (1541, 371, 180, 17), 'r7c1': (454, 395, 227, 18), 'r7c2': (688, 395, 573, 18), 'r7c3': (1268, 396, 264, 17), 'r7c4': (1541, 396, 180, 17), 'r8c1': (454, 420, 227, 68), 'r8c2': (687, 421, 574, 67), 'r8c3': (1268, 421, 264, 67), 'r8c4': (1541, 422, 179, 67), 'r9c1': (454, 495, 226, 43), 'r9c2': (687, 496, 574, 43), 'r9c3': (1268, 496, 264, 43), 'r9c4': (1540, 497, 180, 42), 'r10c1': (453, 546, 227, 42), 'r10c2': (687, 546, 574, 43), 'r10c3': (1268, 546, 263, 43), 'r10c4': (1540, 547, 180, 42), 'r11c1': (453, 596, 227, 42), 'r11c2': (687, 596, 574, 43), 'r11c3': (1267, 597, 264, 42), 'r11c4': (1540, 597, 180, 42), 'r12c1': (453, 646, 227, 18), 'r12c2': (687, 647, 573, 17), 'r12c3': (1267, 647, 264, 18), 'r12c4': (1540, 647, 179, 18), 'r13c1': (453, 672, 227, 17), 'r13c2': (686, 672, 574, 17), 'r13c3': (1267, 672, 264, 18), 'r13c4': (1540, 673, 179, 17), 我想过使用占位符来表示值,但是我没有找到适当的解决方案来对r1,r2,r3中的值进行分类。我尝试了以下方法,但不起作用。for key, value in row_dic.items():    if 'r%dc' in key:        counted = Counter(key[:2]).most_common(6)// counted = Counter(key[:2] for key, value in row_dic.items() if ("r%dc") in key).most_common(9)输出最好是这样的:counted = {r1c: 1, r2c: 1, ..., r5c: 4, ...}# orlist = [[1], [1], ..., [4], ...]
查看完整描述

2 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

这种假设所有原始键都在表单中,但假设它们是,您可以这样做r<num>c<num>


counted = dict()

for r in row_dic.keys():

    rownum = r.split("c")[0]

    try:

        counted[rownum] +=1

    except KeyError:

        counted[rownum] = 1

然后将是 .counted{"r1":1,"r2":1... etc...}


如果您希望密钥采用您指定的形式,我想只需将“c”添加回密钥,然后再将其添加到r1ccounted


rowcount[rownum + 'c']


查看完整回答
反对 回复 2022-09-20
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

A 可以先迭代密钥,将密钥拆分为 ,然后将其计数并重新包含进来。'c''c'


from collections import Counter


row_dic = {'r1c1': (680, 155, 591, 12), 'r2c1': (679, 195, 592, 12), 'r3c1': (682, 241, 587, 11), 'r3c2': (1542, 252, 179, 30), 'r4c1': (1541, 289, 180, 49), 'r5c1': (455, 344, 226, 18), 'r5c2': (688, 345, 573, 17), 'r5c3': (1268, 345, 265, 18), 'r5c4': (1541, 345, 180, 18), 'r6c1': (454, 370, 227, 17), 'r6c2': (688, 370, 573, 18), 'r6c3': (1268, 370, 264, 18), 'r6c4': (1541, 371, 180, 17), 'r7c1': (454, 395, 227, 18), 'r7c2': (688, 395, 573, 18), 'r7c3': (1268, 396, 264, 17), 'r7c4': (1541, 396, 180, 17), 'r8c1': (454, 420, 227, 68), 'r8c2': (687, 421, 574, 67), 'r8c3': (1268, 421, 264, 67), 'r8c4': (1541, 422, 179, 67), 'r9c1': (454, 495, 226, 43), 'r9c2': (687, 496, 574, 43), 'r9c3': (1268, 496, 264, 43), 'r9c4': (1540, 497, 180, 42), 'r10c1': (453, 546, 227, 42), 'r10c2': (687, 546, 574, 43), 'r10c3': (1268, 546, 263, 43), 'r10c4': (1540, 547, 180, 42), 'r11c1': (453, 596, 227, 42), 'r11c2': (687, 596, 574, 43), 'r11c3': (1267, 597, 264, 42), 'r11c4': (1540, 597, 180, 42), 'r12c1': (453, 646, 227, 18), 'r12c2': (687, 647, 573, 17), 'r12c3': (1267, 647, 264, 18), 'r12c4': (1540, 647, 179, 18), 'r13c1': (453, 672, 227, 17), 'r13c2': (686, 672, 574, 17), 'r13c3': (1267, 672, 264, 18), 'r13c4': (1540, 673, 179, 17), 'r14c1': (453, 697, 227, 17), 'r14c2': (686, 697, 574, 18), 'r14c3': (1267, 697, 264, 18), 'r14c4': (1540, 698, 179, 17), 'r15c1': (453, 722, 227, 42), 'r15c2': (686, 722, 574, 43), 'r15c3': (1267, 723, 264, 42), 'r15c4': (1540, 723, 179, 42), 'r16c1': (453, 772, 227, 17), 'r16c2': (686, 772, 574, 18), 'r16c3': (1267, 773, 264, 17), 'r16c4': (1540, 773, 179, 17), 'r17c1': (453, 797, 227, 68), 'r17c2': (686, 797, 574, 69), 'r17c3': (1267, 798, 264, 68), 'r17c4': (1540, 798, 179, 68), 'r18c1': (453, 873, 226, 17), 'r18c2': (686, 873, 574, 17), 'r18c3': (1267, 874, 263, 17), 'r18c4': (1540, 874, 179, 17), 'r19c1': (453, 898, 226, 18), 'r19c2': (686, 898, 574, 18), 'r19c3': (1267, 899, 263, 17), 'r19c4': (1540, 899, 179, 17), 'r20c1': (453, 923, 226, 18), 'r20c2': (686, 924, 574, 17), 'r20c3': (1267, 924, 263, 18), 'r20c4': (1540, 925, 179, 17), 'r21c1': (452, 949, 227, 67), 'r21c2': (686, 949, 574, 68), 'r21c3': (1267, 949, 263, 68), 'r21c4': (1539, 950, 180, 67), 'r22c1': (452, 1024, 227, 93), 'r22c2': (685, 1025, 574, 92), 'r22c3': (1266, 1025, 264, 92), 'r22c4': (1539, 1025, 179, 92), 'r23c1': (452, 1124, 227, 43), 'r23c2': (685, 1125, 574, 42), 'r23c3': (1266, 1125, 264, 43), 'r23c4': (1539, 1125, 179, 43), 'r24c1': (452, 1175, 227, 17), 'r24c2': (685, 1175, 574, 18), 'r24c3': (1266, 1175, 264, 18), 'r24c4': (1539, 1176, 179, 17), 'r25c1': (452, 1200, 227, 18), 'r25c2': (685, 1200, 574, 18), 'r25c3': (1266, 1201, 263, 17), 'r25c4': (1539, 1201, 179, 17), 'r26c1': (452, 1225, 226, 18), 'r26c2': (685, 1226, 574, 17), 'r26c3': (1266, 1226, 263, 18), 'r26c4': (1539, 1226, 179, 18), 'r27c1': (452, 1251, 226, 17), 'r27c2': (685, 1251, 574, 18), 'r27c3': (1266, 1251, 263, 18), 'r27c4': (1539, 1252, 179, 17), 'r28c1': (452, 1276, 226, 18), 'r28c2': (685, 1276, 574, 18), 'r28c3': (1266, 1277, 263, 17), 'r28c4': (1538, 1277, 180, 17), 'r29c1': (452, 1301, 226, 18), 'r29c2': (685, 1301, 574, 18), 'r29c3': (1266, 1302, 263, 17), 'r29c4': (1538, 1302, 180, 17), 'r30c1': (452, 1326, 226, 18), 'r30c2': (685, 1327, 574, 18), 'r30c3': (1266, 1327, 263, 18), 'r30c4': (1538, 1328, 180, 17), 'r31c1': (452, 1352, 226, 42), 'r31c2': (685, 1352, 574, 43), 'r31c3': (1266, 1352, 263, 43), 'r31c4': (1538, 1353, 180, 42), 'r32c1': (452, 1402, 226, 43), 'r32c2': (685, 1402, 574, 43), 'r32c3': (1265, 1403, 264, 42), 'r32c4': (1538, 1403, 180, 42), 'r33c1': (452, 1452, 226, 18), 'r33c2': (685, 1453, 574, 17), 'r33c3': (1265, 1453, 264, 18), 'r33c4': (1538, 1453, 179, 18), 'r34c1': (452, 1478, 226, 18), 'r34c2': (685, 1478, 574, 18), 'r34c3': (1266, 1478, 263, 18), 'r34c4': (1538, 1478, 179, 18), 'r35c1': (452, 1503, 226, 17), 'r35c2': (685, 1503, 574, 17), 'r35c3': (1266, 1503, 263, 18), 'r35c4': (1538, 1504, 179, 17), 'r36c1': (452, 1528, 226, 52), 'r36c2': (685, 1528, 574, 52), 'r36c3': (1266, 1529, 263, 50), 'r36c4': (1538, 1529, 179, 50), 'r37c1': (1267, 1589, 263, 49), 'r37c2': (1537, 1589, 181, 49), 'r38c1': (1267, 1648, 263, 50), 'r38c2': (1537, 1648, 181, 50), 'r39c1': (1267, 1707, 263, 49), 'r39c2': (1357, 1726, 99, 9), 'r39c3': (1537, 1707, 181, 49), 'r40c1': (1299, 1786, 121, 14)}


counts = Counter()

for row_col in row_dic:

    row, _ = row_col.split("c")

    counts[row + 'c'] += 1


print(counts)

或者作为一行:


Counter(row_col.split("c")[0] + 'c' for row_col in row_dic)

输出:


Counter({'r5c': 4, 'r6c': 4, 'r7c': 4, 'r8c': 4, 'r9c': 4, 'r10c': 4, 'r11c': 4, 'r12c': 4, 'r13c': 4, 'r14c': 4, 'r15c': 4, 'r16c': 4, 'r17c': 4, 'r18c': 4, 'r19c': 4, 'r20c': 4, 'r21c': 4, 'r22c': 4, 'r23c': 4, 'r24c': 4, 'r25c': 4, 'r26c': 4, 'r27c': 4, 'r28c': 4, 'r29c': 4, 'r30c': 4, 'r31c': 4, 'r32c': 4, 'r33c': 4, 'r34c': 4, 'r35c': 4, 'r36c': 4, 'r39c': 3, 'r3c': 2, 'r37c': 2, 'r38c': 2, 'r1c': 1, 'r2c': 1, 'r4c': 1, 'r40c': 1})

注意: 是 的子类,因此结果仍然是字典。如果希望结果为 ,则可以投射:Counterdictdictdict


print(dict(counts))

# {'r1c': 1, 'r2c': 1, 'r3c': 2, 'r4c': 1, 'r5c': 4, 'r6c': 4, 'r7c': 4, 'r8c': 4, 'r9c': 4, 'r10c': 4, 'r11c': 4, 'r12c': 4, 'r13c': 4, 'r14c': 4, 'r15c': 4, 'r16c': 4, 'r17c': 4, 'r18c': 4, 'r19c': 4, 'r20c': 4, 'r21c': 4, 'r22c': 4, 'r23c': 4, 'r24c': 4, 'r25c': 4, 'r26c': 4, 'r27c': 4, 'r28c': 4, 'r29c': 4, 'r30c': 4, 'r31c': 4, 'r32c': 4, 'r33c': 4, 'r34c': 4, 'r35c': 4, 'r36c': 4, 'r37c': 2, 'r38c': 2, 'r39c': 3, 'r40c': 1}



查看完整回答
反对 回复 2022-09-20
  • 2 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号