我是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()
#已经具有内置的序列(顺序)
答案 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__