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

Python 使用占位符对字典键组进行计数,python,dictionary,count,key,placeholder,Python,Dictionary,Count,Key,Placeholder,字典由行-列键组成。一些行只有一列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), 'r

字典由行-列键组成。一些行只有一列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), '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)}
我曾想过为值使用占位符,但我没有找到一个合适的解决方案来对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, ...}
# or
list = [[1], [1], ..., [4], ...]

这类假设所有原始键都是rc形式的,但是假设它们是,您可以这样做

counted = dict()
for r in row_dic.keys():
    rownum = r.split("c")[0]
    try:
        counted[rownum] +=1
    except KeyError:
        counted[rownum] = 1
然后计数为{r1:1,r2:1…等..}

如果您希望键的形式与您指定的r1c相同,我想在将其添加到计数器之前,只需将“c”添加回键中即可


这类假设所有原始键都是rc形式的,但是假设它们是,您可以这样做

counted = dict()
for r in row_dic.keys():
    rownum = r.split("c")[0]
    try:
        counted[rownum] +=1
    except KeyError:
        counted[rownum] = 1
然后计数为{r1:1,r2:1…等..}

如果您希望键的形式与您指定的r1c相同,我想在将其添加到计数器之前,只需将“c”添加回键中即可


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是dict的一个子类,因此结果仍然是一个dictionary。如果希望结果为dict,则可以强制转换dict:


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是dict的一个子类,因此结果仍然是一个dictionary。如果希望结果为dict,则可以强制转换dict:


您可能只需要检查该键是否预先存在,或者使用counted[rownum]=counted.getrownum,0+1而不是处理异常。异常非常昂贵,每次找不到密钥时都会触发此异常……是的,这是一个公平的点。对于OP共享的数据集,异常的性能影响似乎可以忽略不计,但如果它非常大,那么这将更加有效。我只是保持了示例的简单性。您可能只需检查该键是否预先存在,或者使用counted[rownum]=counted.getrownum,0+1而不是处理异常。异常非常昂贵,每次找不到密钥时都会触发此异常……是的,这是一个公平的点。对于OP共享的数据集,异常的性能影响似乎可以忽略不计,但如果它非常大,那么这将更加有效。我只是简单地举了个例子。