2016-02-08 71 views
0

我有一个独特的(唯一键)字典,我更新了一些新的键,这取决于网页上的数据。 ,我只想处理很长一段时间后可能出现的新密钥。下面是一段代码就明白了:Python - 仅处理词典的新元素

a = UniqueDict() 

while 1: 

    webpage = update() # return a list 

    for i in webpage: 
     title = getTitle(i) 
     a[title] = new_value # populate only new title obtained because it's a unique dictionnary 

     if len(a) > 50: 
      a.clear() # just to clear dictionnary if too big 

    # Condition before entering this loop to process only new title entered 
    for element in a.keys(): 
     process(element) 

有一个只知道在dictionnary(因为大部分的时间,这将是相同的键和值,所以我不想增添了新的按键方式他们被处理)? 谢谢。

回答

0

您可能需要使用一个OrderedDict

有序词典就像是普通的字典,但他们记住的项目插入的顺序。在迭代有序字典时,将按照首次添加密钥的顺序返回项目。

+0

的OrderedDict只记得顺序,但在我的第二个循环中,dictionnary仍在处理。例如:如果我找到2个标题,我将它们添加到词典中,然后它们将被处理,但它在第二个循环中,这是相同的标题,它们不会被添加,但它们仍然会被处理。 – SyedElec

1

你还可以做的是将处理后的密钥保存在一个集合中。 然后,您可以使用set(d.keys()) - set_already_processed检查新密钥。 并添加使用set_already_processed.add(键)

0

处理按键使自己dict跟踪补充:

class NewKeysDict(dict): 
    """A dict, but tracks keys that are added through __setitem__ 
    only. reset() resets tracking to begin tracking anew. self.new_keys 
    is a set holding your keys. 
    """  
    def __init__(self, *args, **kw): 
     super(NewKeysDict, self).__init__(*args, **kw) 
     self.new_keys = set() 

    def reset(self): 
     self.new_keys = set() 

    def __setitem__(self, key, value): 
     super(NewKeysDict, self).__setitem__(key, value) 
     self.new_keys.add(key) 


d = NewKeysDict((i,str(i)) for i in range(10)) 
d.reset() 
print(d.new_keys) 
for i in range(5, 10): 
    d[i] = '{} new'.format(i) 

for k in d.new_keys: 
    print(d[k])