1

タイトルが合っているかわかりませんが、とりあえず質問です。

次の形式のテキスト ファイル (2 つの列がある) にエントリがあります。

Name     Time  

Santa    1.2
Jim      2.5
Santa    2.7
Santa    2.9

Name をキー、(Time, Count) を値とするディクショナリを作成する必要があります。上記の名前で、サンタは 3 回繰り返され、連続発生の時間差は 2 秒未満です。したがって、そのエントリに関連付けられているカウント値は 3 です。このような場合は、そのエントリをディクショナリから削除する必要があります。それ以外の場合、カウント値はゼロにする必要があります (サンタの 2 回の出現が 2 秒間隔で発生し、3 回目の出現が 2 秒後に発生した場合、そのエントリのカウントはゼロに再初期化されます)。

これは次のように実装できますか: (時間、カウント) をリストとして作成し、そのリストをキーの値として作成しますか? 私はPythonの初心者です、間違いを許してください。

擬似コードは次のようなものです。

Read line in the file:   
    if Santa is in dictionary:    
        time_difference = time from column 2 of the line - dictionary[Santa]  
        if(time_difference < 2):  
            Replace the old occurance with new one along with time  
            # If the previous count value associated with Santa = 1, add 1 to make it 2  
            Make the Count associated with Santa = count+1    
            if(count associated with Santa = 3):  
                delete the Santa entry    
        else:  
            Make count associated with Santa = 1      
    else:  
        Add Santa to dictionary along with its time and make associated count = 1
4

1 に答える 1

1

編集: 2秒間操作がなかった後、カウントタイマーを再開したいことに気づきました。すぐに、その修正を投稿します。

EDIT2:わかりました、追加しました。行ってもいいはずです!

最もクリーンなコードではありませんが、それは仕事を成し遂げます。

class dictholder():
    def __init__(self):
        self.dict = {}

    def add(self, name, time):
        if name in self.dict:
            if (abs(time) - abs(self.dict[name][0]) < 2):
                self.dict[name][1] += 1
                self.dict[name][0] = time
                if self.dict[name][1] == 3:
                    del self.dict[name]
        else:
            self.dict[name] = [time, 1]
        for item in self.dict:
            if (abs(time) - abs(self.dict[item][0]) > 2):
                self.dict[item][1] = 1

    def get(self):
        return self.dict

例:

d = dictholder()
d.add("Santa", 1.2)
d.add("Jim", 2.5)
d.add("Santa", 2.7)
d.add("Santa", 2.9)

print d.get()

>>> 
{'Jim': [2.5, 1]}
>>> 
于 2012-08-06T13:48:29.307 に答える