2017-12-06 17 views
0

私は以下のコードを使用して、日付と時刻のデータを持つ文字列を調べます。文字列があれば、その月の日に基づいてキーを持つ辞書を作っています。その後、その日のタイムスタンプを値として入れたいと思います。 1日に複数の文字列があるので、1つのキーに複数の値を設定したい。複数の値をPython辞書に追加する

現在のコードでは、データを含む文字列が各日のキーを作成できますが、タイムスタンプを追加すると、その都度上書きされて追加されないようです。キーを交換するのではなく、複数の値をキーに追加するにはどうすればよいですか。

for entry in data: 
    month_year = entry[0:7] 
    if month_year == month: 
     day = entry[8:10] 
     trigger_time = entry[11:19] 
     print month_year 
     dicta.update({day.encode("ascii"):[trigger_time]}) 
     #dicta[day.encode("ascii")].append[trigger_time] 

コメント行は試みであったが、私はこのエラーを取得するには、はAttributeErrorは:「int型のオブジェクトは、辞書がどのように働くかであること

+0

値としてリストを使用します。そうすれば、その後のエントリを適切なリストに追加することができます –

答えて

4

「を追加」は属性を持っていない、ただ与えられたに1つの値が存在することができますキー。

あなたがしようとしていることを達成するには、値としてリストを使用できます。出力

my = {} 

for i in range(10): 
    if 'hello' in my: 
     # add to existing list 
     my["hello"].append(i) 
    else: 
     # create a new key with a single value in its list 
     my['hello']=[i] 

print(my) 

...私はデフォルトの辞書は通常、より良い答えであることを認めていますが、インポートを使用して、あなたが何かなどを行うことができ、通常の辞書を使用しない場合

from collections import defaultdict 
dicta = defaultdict(list) #<===== See here 

for entry in data: 
    month_year = entry[0:7] 
    if month_year == month: 
     day = entry[8:10] 
     trigger_time = entry[11:19] 
     print month_year 
     dicta[day.encode("ascii")].append(trigger_time) #<===== See here 
+0

これはそうしているようです。ありがとうございます。 defaultdict(list)は値フィールドをリストに設定するだけですか?同じ行のリストをソートすることは可能ですか、それとも別の行で行う必要がありますか? – dmnte

+0

は、自動的に空のリストになるように値フィールドを設定します。そうでなければ、Veltzのようなアプローチをしなければなりません。 – Anake

+0

効率的に辞書を作成し終えたら、リストをソートするだけです。 '[v.sort()vのdicta.values()]'はリストをソートしますが、何も返しません。 (そうしないでください 'dicta = [v.sort .....') – Anake

0

: { 'こんにちは':[0、1、2、3、4、5、6、7、8、9]}

たり、場合

daykey = day.encode("ascii") 
if daykey in dicta: 
    dicta[daykey].append(trigger_time) 
else: 
    dicta[daykey]=[trigger_time]