2016-02-08 31 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])