2016-12-14 6 views
1

私は辞書に入れたいリストのリストを持っています。基本的には、日付(年/月/日/曜日/誕生日)に基づく出生リストです。私は毎日の総出生数を集計して、週に何回出産したかを合計してみたいと思います。どのように各リストの2つの要素から辞書を作成しますか?

リストの例:

[2000,12,3,2,12000],[2000,12,4,3,34000]... 


days_counts = {1: 23000, 2: 43000, ..., 7: 11943} 

ここでのコードは、これまでのところです:

f = open('births.csv', 'r') 
text = f.read() 
text = text.split("\n") 
header = text[0] 
data = text[1:] 
for d in data: 
    split_data = d.split(",") 
    print(split_data) 

だから、基本的に、私は毎日の反復処理と同じキー(obviusly)に重複した日から出産を追加したいです。

EDIT:dictのキーとして曜日を探すif文でこれを行う必要があります。発見された場合は、対応する出産を価値として割り当てます。 dictにない場合は、キーと値を追加します。私は何もインポートすることはできませんまたはラムダ関数を使用します。

+0

あなたは[ 'WITH'声明]についてお読みください(https://www.python.org/devは、/peps/pep-0343 /) – wpercy

答えて

0

例外処理を使用することができます私はテストのためにそれらを必要とするプリントステートメントを使用して、私は最終的に外部ライブラリを使用せずにそれをしました。 Tobeyと他の人たちの非常に特別なおかげです。

ここでのテストとコードです:テストなし

f = open('births.csv', 'r') 
text = f.read() 
text = text.split("\n") 
header = text[0] 
data = text[1:-1] 
days_counts = {} 
for d in data: 
    r = d.split(",") 
    print(r) #<--- used to test 
    k = r[3] 
    print(k)#<--- used to test 
    v = int(r[4]) 
    print(v)#<--- used to test 
    if k in days_counts: 
     days_counts[k] += v 
     print("If : " , days_counts)#<--- used to test 
    else: 
     days_counts[k] = v 
     print("Else : ", days_counts)#<--- used to test 


print(days_counts)  

コード:

f = open('births.csv', 'r') 
text = f.read() 
text = text.split("\n") 
header = text[0] 
data = text[1:-1] 
days_counts = {} 
for d in data: 
    r = d.split(",") 
    k = r[3] 
    v = int(r[4]) 
    if k in days_counts: 
     days_counts[k] += v 
    else: 
     days_counts[k] = v 

print(days_counts)  
4

collections.Counter() objectを使用して、曜日ごとのカウントを追跡します。また、ファイルの解析を処理するためにcsv moduleを使用したい:

import csv 
from collections import Counter 

per_dow = Counter() 

with open('births.csv', 'r') as f: 
    reader = csv.reader(f) 
    header = next(reader) 
    for row in reader: 
     dow, births = map(int, row[-2:]) 
     per_dow[dow] += births 

私はファイルオブジェクトを管理するためにwithステートメントを使用しました。 withブロックが終了すると、Pythonは自動的にファイルを閉じます。

Counterオブジェクト(余分な力を持つ辞書です)が完成しましたので、出生率の高い曜日を見つけることができます。ほとんどの少なくともするために、次のようなループをプリントアウト曜日:

for day, births in per_dow.most_common(): 
    print(day, births) 
+0

'map(int、row [-2:])'がタプルを返していますか? – pylang

+0

@pylang:いいえ、反復可能な代入はタプルを必要とせず、反復可能でなければなりません。 –

+0

あなたのスライスは2つの変数に解凍されています。ありがとう。 – pylang

1

文外部のライブラリを使用せずに、またはもし、あなたが遊んでた後、[OK]を

birth_dict = {} 
birth_list = [[2000,12,3,2,12000],[2000,12,4,3,34000]] 
for birth in birth_list: 
    try: 
     birth_dict[birth[3]]+=birth[4] 
    except KeyError: 
     birth_dict[birth[3]]=birth[4] 
print birth_dict 
+0

これはたくさんの助けをしました。おはなし: –

+0

クール。あなたはあなたが使った答えを受け入れるべきです。 – Tobey

関連する問題