在python中初始化ordereddict

时间:2019-08-30 11:25:08

标签: python dictionary

我是Python新手。

我正在尝试创建许多ordereddict,但是因为我是按照混乱的顺序填写的,所以我不得不创建一个函数以传递正常的字典来获得所需的顺序。

info = dict()
info['age'] = 3
...

keys=['id','name','age','ck_id','image']
def fix_order(my_dict):
    new_queue = OrderedDict()
    for k in keys:
        new_queue[k] = item[k]
    return new_queue

我想做的是创建一个简单的类,无论填充顺序如何,该类都已经具有我想要的顺序。

我检查了这个问题How to create an OrderedDict in Python?,但这假设我有第一手资料。

即我想要的info = my_dict()#已经具有内置的序列(顺序)

1 个答案:

答案 0 :(得分:0)

据我了解,您希望拥有一个数据结构,该结构可以为您提供与dict相同的操作,但是如果进行迭代,则会以精确的顺​​序提供项目。

在这种情况下,您可以覆盖提供可迭代项的方法:__iter__方法,key方法,values方法和items方法(也许还有其他我不记得的东西

有一个基础课可以开始。 (即,这只会迭代您指定的元素,但是可能您也想扩展以迭代其他元素)

from collections import UserDict

class MyDict(UserDict):
    def __init__(self, *args, **kwargs):
        self.order = kwargs.pop('order')
        super().__init__(*args)
    def change_order(self, order: list):
        self.order = order

    def __iter__(self):
        for key in self.order:
            if key in self:
                yield key

    def keys(self):
        for key in self.order:
            if key in self:
                yield key

    def values(self):
        for key in self.order:
            if key in self:
                yield self[key]

    def items(self):
        for key in self.order:
            if key in self:
                yield key, self[key]

有一个测试:

d = MyDict({"b" : 2, "c": 3, "a": 1}, order=["a","b","c"])
print(d)

for k in d:
    print(k, end=" ")
#a b c
print()

for k in d.keys():
    print(k, end=" ")
#a b c
print()

for v in d.values():
    print(v, end=" ")
#1 2 3
print()

for k, v in d.items():
    print(f"{k}-{v}", end=" ")
#a-1 b-2 c-3

如果您希望字典也按所需顺序转换为字符串(并打印),则可以覆盖__repr____str__