DATA = { u'spam': u'eggs', u'foo': frozenset([u'Gah!']), u'bar': { u'baz': 97 },
u'list': [u'list', (True, u'Maybe'), set([u'and', u'a', u'set', 1])]}
def convert(data):
if isinstance(data, basestring):
return str(data)
elif isinstance(data, collections.Mapping):
return dict(map(convert, data.iteritems()))
elif isinstance(data, collections.Iterable):
return type(data)(map(convert, data))
else:
return data
print DATA
print convert(DATA)
假设:
- 您已经导入了collections模块,并可以利用其提供的抽象基类
- 您很乐意使用默认编码进行转换(如果需要显式编码,请使用
data.encode('utf-8')
而不是str(data)
)。
如果您需要支持其他容器类型,希望可以很明显地遵循该模式并为其添加案例。