Hallo,
vielleicht ist noch interessant, dass json per default deine Tupel zu Listen und deine Integers zu Strings macht:
Code: Alles auswählen
In [22]: tree
Out[22]:
('Buch',
{2: ('Lauch', {}),
3: ('Baum', {}),
4: ('Tier',
{4: ('Haus', {1: ('Maus', {}), 3: ('Darm', {})}),
5: ('Wurst', {4: ('Blatt', {})})}),
5: ('Essen', {}),
7: ('Zwiebel', {})})
In [23]: json.loads(json.dumps(tree))
Out[23]:
['Buch',
{'2': ['Lauch', {}],
'3': ['Baum', {}],
'4': ['Tier',
{'4': ['Haus', {'1': ['Maus', {}], '3': ['Darm', {}]}],
'5': ['Wurst', {'4': ['Blatt', {}]}]}],
'5': ['Essen', {}],
'7': ['Zwiebel', {}]}]
Das kann man zwar konfigurieren (ich habe gerade nicht präsent, wie genau), aber meines Wissens stößt du da an deine Grenzen, wenn das ursprüngliche Objekt sowohl Tupel als auch Listen enthält. Pickle erhält die jeweiligen Typen:
Code: Alles auswählen
In [4]: pickle.loads(pickle.dumps(tree))
Out[4]:
('Buch',
{2: ('Lauch', {}),
3: ('Baum', {}),
4: ('Tier',
{4: ('Haus', {1: ('Maus', {}), 3: ('Darm', {})}),
5: ('Wurst', {4: ('Blatt', {})})}),
5: ('Essen', {}),
7: ('Zwiebel', {})})