[英]Python MongoDB save dictionary of sets
我有一本要永久保存在 mongodb 数据库中的集合字典。 但是,我在保存过程中收到错误“无法编码 object: {1, 2}, of type: <class 'set'>”。 我看到一个帖子,其中一个用户的建议是将每个集合保存为一个字典,但这对我来说似乎不是一个好的解决方案。 除了将每个集合转换为列表之外,还有其他方法可以将字典与集合一起保存吗? 该字典类似于以下代码,但更复杂,并且包含数千个带有字符串键和 set() 值的条目:
{'One': {1, 2}, 'Two': {3, 4}, 'Three': {5, 6}}
MongoDB 曾经使用 SONManipulators 来转换进出数据库的文档,但它们在 4.0 中已被弃用。因此您必须将您的set
预处理为对象,以便在加载时保存和恢复它们。
例子:
test = {'One': {1, 2}, 'Two': {3, 4}, 'Three': {5, 6}}
def unsetify(doc):
for k, v in doc.items():
if isinstance(v, dict):
doc[k] = unsetify(v)
elif isinstance(v, set):
doc[k] = { '_type': 'set', '_val': list(v) }
return doc
def resetify(doc):
for k, v in doc.items():
if isinstance(v, dict):
if v.get('_type', '') == 'set':
doc[k] = set(v['_val'])
else:
doc[k] = resetify(v)
return doc
doc = unsetify(test)
print(doc)
print(resetify(doc))
Output:
{'One': {'_type': 'set', '_val': [1, 2]}, 'Two': {'_type': 'set', '_val': [3, 4]}, 'Three': {'_type': 'set', '_val': [5, 6]}}
{'One': {1, 2}, 'Two': {3, 4}, 'Three': {5, 6}}
是的,它是递归的,是的,它会就地破坏输入文档而不是制作副本等。对于确切的用例可能并不理想(没有更多信息不能说),但演示了原理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.