2016-04-10 11 views
0

ファイルを取得してコードを実行しています。ファイルに数字が何回表示されているのかを調べる

100 
200 
300 
100 
200 
400 

私の目標は、私のコードは、ファイルに数字を反復処理するために取得することで、出力はキーとどのように今までに何回それが現れるように番号を持つ辞書です:行ごとのファイルに表示されるものの例値としてファイル内に格納します。たとえば:

{100:2200:2300:1400:1}

これは私がこれまでにまとめたものです。

def counts(filename): 
    d={} 
    with open(filename) as f: 
     for line in f 
      for number in line: 


    return d 

また、これには.count()を使用できますか?だから私は、ファイル内の数字のリストを作成し、キーとしてそれらを設定し、それぞれの数字が表示され、キーの値として設定されている対応する量を設定するためのリストを持っていることができますか?

+0

['collections.Counter'](https://docs.python.org/2/library/collections.html#collections.Counter)? –

+0

1行に1つの番号しかない場合、なぜ内部ループが必要ですか? –

+1

[Python:単語がファイル内で何回出現するかを数える](http://stackoverflow.com/questions/22849662/python-count-how-many-times-a-word-occurs-in-a -file) – Tom

答えて

1
def counts(filename): 
    d={} 
    with open(filename) as f: 
     contents = f.read() 

    contents = contents.split("\n") 
    del contents[-1] 
    contents = map(int, contents) 

    for content in contents: 
     if content not in d: 
      d[content] = 1 
     else: 
      d[content] = d[content] + 1 

    return d 


print counts(filename) 

O/P

{200: 2, 300: 1, 400: 1, 100: 2} 
0

uは、各位置が数字を表し、その内容がファイルに表示される数字を表す行列を作成できます。 さらに、ファイルの数値と比較するコンパレータを作成してカウンタを増やすことができます

0

ファイル内の各数字について、辞書にキーとして表示されない場合は、 0)。それにかかわらず、その番号のカウントをインクリメントします。

+0

OPはロジックを知り、コーディングに助けが必要なようです。 – th3an0maly

+0

後者に同意します。前者については全く明らかではない。 –

0

これはジェネレータを使用してすべてのラインを読み取り、整数に変換します。

from collections import Counter 
from csv import reader 

def counts(filename): 
    return Counter(int(line[0]) for line in reader(open(filename)) if line) 


c = counts('my_file.csv') 
>>> c 
Counter({'100': 2, '200': 2, '300': 1, '400': 1}) 

>>> c.most_commont(5) 
[('200', 2), ('100', 2), ('300', 1), ('400', 1)] 

>>> dict(c) 
{'100': 2, '200': 2, '300': 1, '400': 1} 
0

1つの簡単な方法は、カウントが行われた後dictに簡単に変換可能なCounterを、使用することです。

from collections import Counter 

def counts(filename): 
    with open(filename) as f: 
     return dict(Counter(int(line) for line in f)) 

# {200: 2, 100: 2, 300: 1, 400: 1} 
0

私はあなたの番号を追跡するためにdefaultdictを使用するカウント:

from collections import defaultdict 
frequencies = defaultdict(int) 
for number in open('numbers.txt'): 
    frequencies[int(number)] += 1 

for number in sorted(frequencies.keys()): 
    print(number, ':', frequencies[number]) 

を与える:通常の辞書と

100 : 2 
200 : 2 
300 : 1 
400 : 1 

を、あなたが最初にKeyErrorをキャッチする必要があります番号に遭遇した時刻:

count = {} 
for number in open('numbers.txt'): 
    try: 
     count[int(number)] += 1 
    except KeyError: 
     count[int(number)] = 1 
あなたは空想のライブラリを使用したい場合には、 Counterで@アレキサンダーの答えを行くことができます

word_count = {} 
with open('temp.txt') as file: 
    for line in file: 
     word_count[line[:-1]] = word_count.setdefault(line[:-1], 0) + 1 

:だけの簡単なPythonの使用

関連する問題