我有一个问题在Python文档(https://docs.python.org/2/library/stdtypes.html#set.intersection)中并没有很清楚的解释。
使用set.intersection时,结果集包含当前集合或其他集合中的对象?如果两个对象具有相同的值但在内存中是不同的对象呢?
我正在使用它来比较从文件中提取出的先前数据和从互联网获取的新数据。两者都有一些相似的对象,但我想更新旧的对象。也许有更简单的方法来实现这个目标吗?如果集合实现了
使用set.intersection时,结果集包含当前集合或其他集合中的对象?如果两个对象具有相同的值但在内存中是不同的对象呢?
我正在使用它来比较从文件中提取出的先前数据和从互联网获取的新数据。两者都有一些相似的对象,但我想更新旧的对象。也许有更简单的方法来实现这个目标吗?如果集合实现了
__getitem__
,那就会更容易些。 oldApsExtract = set()
if (os.path.isfile("Apartments.json")):
with open('Apartments.json', mode='r') as f:
oldApsExtract = set(jsonpickle.decode(f.read()))
newApsExtract = set(getNewExtract())
updatedAps = oldApsExtract.intersection(newApsExtract)
deletedAps = oldApsExtract.difference(newApsExtract)
newAps = newApsExtract.difference(oldApsExtract)
for ap in deletedAps:
ap.mark_deleted()
for ap in updatedAps:
ap.update()
saveAps = list(oldApsExtract) + list(newAps)
with open('Apartments.json', mode='w') as f:
f.write(jsonpickle.encode(saveAps))
==
比较时不受影响的规则。集合并不适用于可变内容。 - user2357112__getitem__
?如果这确实是你想要的,你可以这样做:for thing in set1: if thing in set2: do_whatever(thing)
。 - jonrsharpe