Python:计算一个单词在文件中出现的次数

bw6*_*293 4 python file count

我有一个文件,其中包含一个城市名称,然后文件中每行包含一个州名称。我想计算一个状态名称出现的次数并返回值。

例如,如果我的文件包含:

Los Angeles   California
San Diego     California
San Francisco California
Albany        New York
Buffalo       New York
Orlando       Florida
Run Code Online (Sandbox Code Playgroud)

我想返回每个州名出现的次数。我有这个给加利福尼亚。

for line in f:
    California_count=line.find("California")
    if California_count!=-1:
        total=line.count("California")
print(total)
Run Code Online (Sandbox Code Playgroud)

这只会给我值 1,我假设这是因为它每行出现 1 次。我如何让它返回数字 3 而不是数字 1?

m.w*_*ski 7

使用字典存储计数器:

data = """Los Angeles   California
San Diego     California
San Francisco California
Albany        New York
Buffalo       New York
Orlando       Florida""".splitlines()

counters = {}
for line in data:
    city, state = line[:14], line[14:]
    # city, state = line.split('\t') # if separated by tabulator
    if state not in counters:
        counters[state] = 1
    else:
        counters[state] += 1
print counters
# {'Florida': 1, 'New York': 2, 'California': 3}
Run Code Online (Sandbox Code Playgroud)

您可以使用collections.defaultdict以下方法简化它:

from collections import defaultdict
counter = defaultdict(int)
for line in data:
    city, state = line[:14], line[14:]
    counter[state] += 1

print counter
# defaultdict(<type 'int'>, {'Florida': 1, 'New York': 2, 'California': 3})
Run Code Online (Sandbox Code Playgroud)

或使用collections.Counter和生成器表达式:

from collections import Counter
states = Counter(line[14:] for line in data)
# Counter({'California': 3, 'New York': 2, 'Florida': 1})
Run Code Online (Sandbox Code Playgroud)