python - 在python中初始化orderdict
问题描述
我是 Python 新手。
我正在尝试创建很多ordereddict
,但是因为我以混乱的顺序填写它,所以我必须创建一个函数来传递正常的 dict 以获得我想要的顺序。
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()
的#已经有内置的序列(顺序)
解决方案
据我了解,您希望拥有一个数据结构,可以为您提供与 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__
如果您希望您的字典也按照您想要的顺序转换为字符串(并打印)
推荐阅读
- powershell - Powershell如何查找网络上另一个用户的空闲时间(鼠标和键盘,而不是进程)?
- apache-spark - 通过 Spark 对各个字段执行多个正则表达式规则
- javascript - 如何在 Three.js 中对 N 面进行振荡动画
- firebase-realtime-database - Firebase 实时数据库规则 - 编写时使用变量作为数据键值对中的键
- python - 在 Django 中运行面部识别脚本
- excel - 填充分组形状的整个容器 - Excel
- ftp - 他们是一种使用 WinSCP 将树莓派上的目录同步到笔记本电脑的方法吗
- node.js - 无法使用 slackbots (javascript) 通过 Slackbot 发送图像
- python - 如何使用马尔可夫链矩阵生成音乐?
- c++ - 在回调中调用解析器的设计模式