1

我正在尝试检查一个数字在字典中出现的次数。

此代码仅在我输入一个数字时才有效。

numbers = input("Enter numbers ")

d = {}
d['0'] = 0
d['1'] = 0
d['2'] = 0
d['3'] = 0
d['4'] = 0
d['5'] = 0
d['6'] = 0
d['7'] = 0
d['8'] = 0
d['9'] = 0

for i in numbers:
    d[numbers] += 1

print(d)

例如,如果我输入8输出将是

{'8': 1, '9': 0, '4': 0, '5': 0, '6': 0, '7': 0, '0': 0, '1': 0, '2': 0, '3': 0}

但是,如果我输入887655,那么它会给我一个builtins.KeyError: '887655'

如果我输入887655输出实际上应该是

{'8': 2, '9': 0, '4': 0, '5': 2, '6': 1, '7': 1, '0': 0, '1': 0, '2': 0, '3': 0}
4

5 回答 5

3

改为使用collections.Counter它 - 无需重新发明轮子。

>>> import collections
>>> collections.Counter("887655")
Counter({'8': 2, '5': 2, '6': 1, '7': 1})
于 2013-04-04T05:30:09.560 回答
2

你可能应该改变

d[numbers] += 1

=>

d[i] += 1
于 2013-04-04T05:30:12.797 回答
0

我想你想要的实际上是这样的:

for number in numbers:
    for digit in str(number):
        d[digit] += 1
于 2013-04-04T05:32:55.523 回答
0

你应该使用collections.Counter

from collections import Counter
numbers = input("Enter numbers: ")
count = Counter(numbers)
for c in count:
    print c, "occured", count[c], "times"
于 2013-04-04T05:33:06.947 回答
0

我会推荐collections.Counter,但这是您的代码的改进版本:

numbers = input("Enter numbers ")

d = {} # no need to initialize each key

for i in numbers:
    d[i] = d.get(i, 0) + 1 # we can use dict.get for that, default val of 0

print(d)
于 2013-04-04T06:03:10.077 回答