我有一個集合字典,我想在 mongodb 資料庫中持久保存。但是,我在保存程序中收到錯誤“無法編碼物件:{1, 2},型別:<class 'set'>”。我看到一個帖子,其中一位用戶的建議是將每組保存為字典,但這對我來說似乎不是一個好的解決方案。除了將每個集合轉換為串列之外,還有其他方法可以使用集合保存字典嗎?該字典類似于以下代碼,但更復雜,并且有數千個帶有字串鍵和 set() 值的條目:
{'One': {1, 2}, 'Two': {3, 4}, 'Three': {5, 6}}
uj5u.com熱心網友回復:
MongoDB 曾經有 SONManipulators 來轉換進出資料庫的檔案,但它們在 4.0 中被棄用..所以你必須將你的sets預處理為物件以保存并在加載時恢復它們。
例子:
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))
輸出:
{'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}}
是的,它是遞回的,是的,它就地破壞了輸入檔案,而不是制作副本等。對于確切的用例(如果沒有更多資訊就不能說)可能不是理想的選擇,但演示了原理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/389731.html
