字典的具体实现

时间:2012-08-06 13:07:36

标签: python python-3.x python-2.7

我不知道标题是否合适,但目前这是我的问题:

我在文本文件中有条目(有2列),格式如下:

Name     Time  

Santa    1.2
Jim      2.5
Santa    2.7
Santa    2.9

我应该形成一个以Name作为键的字典,(Time,Count)作为值。在上面的名称中,Santa重复3次,连续出现的时间差小于2秒。因此,与该条目关联的Count值为3.如果发生这种情况,则应从字典中删除该条目。否则,计数值应该为零(如果圣诞老人的2次发生相隔2秒,第2次发生在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

1 个答案:

答案 0 :(得分: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]}
>>>