我有一个独特的(唯一键)字典,我更新根据网页上的数据添加一些新密钥。 我想只处理很长一段时间后可能出现的新密钥。这是一段要理解的代码:
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 :(得分: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
他返回了真