为了账号安全,请及时绑定邮箱和手机立即绑定

如何按插入顺序从字典中检索项目?

如何按插入顺序从字典中检索项目?

胡子哥哥 2019-12-16 12:12:11
是否可以按插入顺序从Python字典中检索项目?
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

dict如果您使用的是CPython 3.6+(或其他任何Python实现的Python 3.7+),则默认情况下,标准Python会执行此操作。


在旧版本的Python上,您可以使用collections.OrderedDict。


查看完整回答
反对 回复 2019-12-17
?
HUWWW

TA贡献1874条经验 获得超12个赞

其他答案是正确的。这是不可能的,但是您可以自己编写。但是,如果您不确定如何实际实现这样的东西,这是一个完整且有效的实现,该类将我刚刚编写和测试的dict子类化。(请注意,传递给构造函数的值的顺序是不确定的,但是会在以后传递值之前出现,并且您始终可以始终不允许使用值初始化有序的dict。)


class ordered_dict(dict):

    def __init__(self, *args, **kwargs):

        dict.__init__(self, *args, **kwargs)

        self._order = self.keys()


    def __setitem__(self, key, value):

        dict.__setitem__(self, key, value)

        if key in self._order:

            self._order.remove(key)

        self._order.append(key)


    def __delitem__(self, key):

        dict.__delitem__(self, key)

        self._order.remove(key)


    def order(self):

        return self._order[:]


    def ordered_items(self):

        return [(key,self[key]) for key in self._order]



od = ordered_dict()

od["hello"] = "world"

od["goodbye"] = "cruel world"

print od.order()            # prints ['hello', 'goodbye']


del od["hello"]

od["monty"] = "python"

print od.order()            # prints ['goodbye', 'monty']


od["hello"] = "kitty"

print od.order()            # prints ['goodbye', 'monty', 'hello']


print od.ordered_items()

# prints [('goodbye','cruel world'), ('monty','python'), ('hello','kitty')]



查看完整回答
反对 回复 2019-12-17
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

使用OrderedDict(),从2.7版本开始可用


只是出于好奇:


from collections import OrderedDict

a = {}

b = OrderedDict()

c = OredredDict()


a['key1'] = 'value1'

a['key2'] = 'value2'


b['key1'] = 'value1'

b['key2'] = 'value2'


c['key2'] = 'value2'

c['key1'] = 'value1'


print a == b #True

print a == c #True

print b == c #False



查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 266 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信