在Python中,我目前有一个带有复合键的词典。在这本词典中,有多个这些键出现。 (键以逗号分隔):
(A,B), (A,C), (A,B), (A,D), (C,A), (A,B), (C,A), (C,B), (C,B)
我已经有一些东西总计独特的事件,并计算重复项,这给我打印输出类似于:
(A,B)
的计数为4
,(A,C)
的计数为2
,(B,C)
的计数为6
,等等。
我想知道如何编写一个可以提供以下内容的循环:
打印出键的第一部分的第一次出现及其关联的值和计数。
姓名:A:
Type Count
B 4
C 2
Total 6
姓名:B:
Type Count
A 3
B 2
C 3
Total 8
我知道我需要在first statement = the first statement
创建一个循环并执行以下操作,但不知道如何处理/编码。
答案 0 :(得分:2)
这是一个稍慢的算法,它将完成它:
def convert(myDict):
keys = myDict.keys()
answer = collections.defaultdict(dict)
for key in keys:
for k in [k for k in keys if k.startswith(key[0])]:
answer[key[0]][k[1]] = myDict[k]
return answer
最终,我认为你所追求的是trie
答案 1 :(得分:0)
说你的词典对于给定的键有多个值有点误导。 Python不允许这样做。相反,你拥有的是元组的键。您想要解压缩这些元组并重建嵌套字典。
我是这样做的:
import collections
# rebuild data structure
nested = collections.defaultdict(dict)
for k, v in myDict.items():
k1, k2 = k # unpack key tuple
nested[k1][k2] = v
# print out data in the desired format (with totals)
for k1, inner in nested.items():
print("%s\tType\tCount" % k1)
total = 0
for k2, v in innner.items():
print("\t%s\t%d" % (k2, v))
total += v
print("\tTotal\t%d" % total)