Python:While Statement = Statement打印关联值

时间:2012-10-15 23:48:44

标签: python loops dictionary unique

在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创建一个循环并执行以下操作,但不知道如何处理/编码。

2 个答案:

答案 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)