У меня есть класс nesteddict, полученный из коллекций collection.defaultdict, который содержит вложенный набор словарей:
import collections
class nesteddict(collections.defaultdict):
"""Nested dictionary structure.
Based on Stack Overflow question 635483
"""
def __init__(self):
collections.defaultdict.__init__(self, nesteddict)
self.locked = False
Я хотел бы иметь возможность выполнить операцию, экземпляр которой преобразует все объекты nesteddictк python-native объектам dict.
Один из способов сделать это состоит в том, чтобы иметь метод:
def todict(self):
for (key,val) in self.iteritems():
if isinstance(val,nesteddict):
val.todict()
self[key] = dict(val)
self = dict(self)
Это успешно при замене всех внутренних объектов отображения на типы dict, но последнийоператор в методе, очевидно, не будет работать.
Вот пример:
In [93]: a = pyutils.nesteddict()
In [94]: a[1][1] = 'a'
In [95]: a[1][2] = 'b'
In [96]: a[2][1] = 'c'
In [97]: a[2][2] = 'd'
In [98]: print a
defaultdict(<class 'pyutils.nesteddict'>, {1: defaultdict(<class 'pyutils.nesteddict'>, {1: 'a', 2: 'b'}), 2: defaultdict(<class 'pyutils.nesteddict'>, {1: 'c', 2: 'd'})})
In [99]: a.todict()
In [100]: print a
defaultdict(<class 'pyutils.nesteddict'>, {1: {1: 'a', 2: 'b'}, 2: {1: 'c', 2: 'd'}})
Есть ли способ сделать это в Python?Есть метод, который преобразует свой объект в другой тип?Если нет, то что является хорошей альтернативой этому.Обратите внимание, что на практике тип данных может быть большим, поэтому было бы предпочтительнее не просто сделать копию, а затем вернуть ее.
Спасибо!
Uri