J'ai ce code de hachage vraiment suivant qui supprime les références circulaires de tout type de structure de données construit à partir dict
, tuple
et list
objets.Supprimer les références circulaires dans les dicts, les listes, les tuples
import ast
def remove_circular_refs(o):
return ast.literal_eval(str(o).replace("{...}", 'None'))
Mais je n'aime pas comment c'est hacky. Cela peut-il être fait sans transformer la structure de données en une représentation sous forme de chaîne?
Voici un exemple de structure pour tester avec:
doc1 = {
"key": "value",
"type": "test1",
}
doc1["self"] = doc1
doc = {
'tags': 'Stackoverflow python question',
'type': 'Stackoverflow python question',
}
doc2 = {
'value': 2,
'id': 2,
}
remove_circular_refs(doc)
remove_circular_refs(doc1)
remove_circular_refs(doc2)