Python - 仅处理dictionnary的新元素

时间:2016-02-08 15:56:58

标签: python python-3.x

我有一个独特的(唯一键)字典,我更新根据网页上的数据添加一些新密钥。 我想只处理很长一段时间后可能出现的新密钥。这是一段要理解的代码:

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中添加的新键(因为大多数时候,它将是相同的键和值,所以我不希望它们被处理)? 谢谢。

4 个答案:

答案 0 :(得分:1)

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

添加已处理的密钥

答案 1 :(得分:0)

您可能想要使用OrderedDict

  

有序词典就像常规词典一样,但它们记住了项目的插入顺序。迭代有序字典时,项目按照其键首次添加的顺序返回。

答案 2 :(得分: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])

答案 3 :(得分:0)

  

(因为大多数时候,它们将是相同的键和值,所以我不希望它们被处理)

您变得复杂! 键是不变的且唯一的。 每个键后跟一个用冒号分隔的值。

dict = {"title",title}
text = "textdude"
dict["keytext"]=text

这是添加一个值textdude,其新键名为“ keytext”。 对于支票,我们使用“ in”。

"textdude" in dict

他返回了真