栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何重写此函数以实现OrderedDict?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何重写此函数以实现OrderedDict?

你可以使用新的将其加入到标准库的子模块2.7版本 ✶* 。实际上,您需要的是一个不存在的+组合-
但可以通过如下所示的子类创建一个+组合:

OrderedDict
dict``collections



*
Ordered``defaultdict``OrderedDict

如果您的Python版本没有该版本,则

OrderedDict
应该可以使用Raymond
Hettinger的Py2.4
ActiveState配方的有序字典作为基类。

import collectionsclass OrderedDefaultdict(collections.OrderedDict):    """ A defaultdict with OrderedDict as its base class. """    def __init__(self, default_factory=None, *args, **kwargs):        if not (default_factory is None or callable(default_factory)): raise TypeError('first argument must be callable or None')        super(OrderedDefaultdict, self).__init__(*args, **kwargs)        self.default_factory = default_factory  # called by __missing__()    def __missing__(self, key):        if self.default_factory is None: raise KeyError(key,)        self[key] = value = self.default_factory()        return value    def __reduce__(self):  # Optional, for pickle support.        args = (self.default_factory,) if self.default_factory else tuple()        return self.__class__, args, None, None, iter(self.items())    def __repr__(self):  # Optional.        return '%s(%r, %r)' % (self.__class__.__name__, self.default_factory, self.items())def simplexml_load_file(file):    from lxml import etree    tree = etree.parse(file)    root = tree.getroot()    def xml_to_item(el):        item = el.text or None        child_dicts = OrderedDefaultdict(list)        for child in el.getchildren(): child_dicts[child.tag].append(xml_to_item(child))        return collections.OrderedDict(child_dicts) or item    def xml_to_dict(el):        return {el.tag: xml_to_item(el)}    return xml_to_dict(root)x = simplexml_load_file('routines/test.xml')print(x)for y in x['root']:    print(y)

测试XML文件产生的输出如下所示:

{'root':    OrderedDict(        [('a', ['1']),         ('aa', [OrderedDict([('b', [OrderedDict([('c', ['2'])]), '2'])])]),         ('aaa', ['3']),         ('aaaa', [OrderedDict([('bb', ['4'])])]),         ('aaaaa', ['5'])        ]    )}aaaaaaaaaaaaaaa

我认为这接近您想要的。

小更新:

添加了一种

__reduce__()
方法,该方法将允许对类的实例进行正确的酸洗和酸洗。这个问题不是必需的,但是是类似的问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634351.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号