0

我正在制作一个示例程序来计算一个字符在给定单词中出现的次数。说“好”,g 发生一次,o 发生 2 次等。现在我想尝试通过将列表作为我的字典的值来进一步实现这一点,每次找到现有字符时将第一个元素(索引 0)增加 1并通过单词中字符的索引附加相同的dict值列表,例如 Word="Programming is nature" Dict={'a':[2,5,16],'i':[2,8, 12]...等}

因此,每个 dict 值的第一个索引随着字符的出现而增加(即,如果找到该字符,则 +1)但列表中的其他值被附加(保存在单词中找到字符的位置)。我有这个仅用于计数,但不适用于索引

def count(word):
    v=0;b={}
    b.clear()
    while word[v] in word:
        if word[v] in b.keys():
            b[word[v]]+=1;v+=1
        else:
            b[word[v]]=1;v+=1
        if v==(len(word)):
            break
    print("\n",b)


word=input("Enter word: ")
count(word)
4

5 回答 5

2

使用 acollections.defaultdict代替:

import collections

def count(word):
    c = collections.defaultdict(list)
    for index, letter in enumerate(word):
        c[letter] += [index]
    return c

print count('programming is nature')

输出:

defaultdict(<type 'list'>, {'a': [5, 16], ' ': [11, 14], 'e': [20], 'g': [3, 10], 'i': [8, 12], 'm': [6, 7], 'o': [2], 'n': [9, 15], 'p': [0], 's': [13], 'r': [1, 4, 19], 'u': [18], 't': [17]})
于 2012-07-01T05:36:51.117 回答
0

使用defaultdict有点不同:

from collections import defaultdict
example = 'Programming is nature'
D=defaultdict(lambda: [0])
for i,c in enumerate(example):
    D[c][0] += 1
    D[c].append(i)
for k,v in D.items():
    print(k,v)

输出匹配您的示例:

a [2, 5, 16]
  [2, 11, 14]
e [1, 20]
g [2, 3, 10]
i [2, 8, 12]
m [2, 6, 7]
o [1, 2]
n [2, 9, 15]
P [1, 0]
s [1, 13]
r [3, 1, 4, 19]
u [1, 18]
t [1, 17]
于 2012-07-01T06:05:28.787 回答
0

这是我的解决方案:

def count(word):
    b={}
    for i,letter in enumerate(word):
        if letter not in b:
            b[letter]=[0]
        b[letter][0]+=1
        b[letter].append(i)
return b

print(count("编程是天性"))

word="编程是天性" print(count(word))

完全按照您想要的方式工作。:)

输出:

{'a': [2, 5, 16], ' ': [2, 11, 14], 'e': [1, 20], 'g': [2, 3, 10], 'i': [2, 8, 12], 'm': [2, 6, 7], 'o': [1, 2], 'n': [2, 9, 15], 'P': [1, 0], 's': [1, 13], 'r': [3, 1, 4, 19], 'u': [1, 18], 't': [1, 17]}
于 2012-07-01T05:39:47.513 回答
0

好的,所以先做一些笔记。

您应该使用raw_input而不是inputinput评估您作为 Python 代码输入的内容raw_input,从 stdin 获取输入(如果您使用的是 Python 3,请忽略这一点)。如果您的 dict 值可以采用特定的默认值,则collections.defaultdict非常有用。

from collections import defaultdict

def count(word):
    counts = defaultdict(int)
    appearances = defaultdict(list)
    for pos, val in enumerate(word)
        counts[val] += 1
        appearances[c].append(pos)

    print 'counts:', counts
    print 'appearances:', appearances

word = input("Enter word: ")
count(word)

defaultdict将可调用对象作为其参数,因此如果您这样做:

x = defaultdict(int)
x['b'] += 1

因为'b'它不是 x 中的键,所以它会将其初始化为int()(零)的值。

于 2012-07-01T05:40:15.453 回答
0

如果您使用的是 Python 2.7+,请使用Counter

>>> from collections import Counter
>>> Counter('abchfdhbah')
Counter({'h': 3, 'a': 2, 'b': 2, 'c': 1, 'd': 1, 'f': 1})
>>> the_count = Counter('abchfdhbah')
>>> the_count['h']
3
于 2012-07-01T05:41:02.003 回答