gpt4 book ai didi

python - 如何制作一个排序的字典类?

转载 作者:行者123 更新时间:2023-11-28 20:46:13 25 4
gpt4 key购买 nike

我很难写一个类,它应该能够遍历一个排序的字典。我的主要问题是迭代器过载。我不知道如何对字典进行排序。

class SortedDict():
def __init__(self, dic = None):
self.dic = {}
if len(dic) > 0: self.dic = dic;

def __iter__(self):
self.dic = sorted(self.dic.keys())
self.index = 0
return self

def next(self):
if self.index+1 < len(self.dic):
self.index += 1
return self.dic.keys()[self.index]

最佳答案

您不必重新发明轮子。您可以简单地将 dict 子类化并实现 SortedDict,就像这样

class SortedDict(dict):
def __iter__(self):
return iter(sorted(super(SortedDict, self).__iter__()))

def items(self):
return iter((k, self[k]) for k in self)

def keys(self):
return list(self)

def values(self):
return [self[k] for k in self]

谢谢 PokeMartijn Pieters ,帮助我回答这个问题。

您可以看到 collections.OrderedDict 之间的区别, dictSortedDict

a = OrderedDict()
a["2"], a["1"], a["3"] = 2, 1, 3
print list(a.items()), a.keys(), a.values()

b = {}
b["2"], b["1"], b["3"] = 2, 1, 3
print list(b.items()), b.keys(), b.values()

c = SortedDict()
c["2"], c["1"], c["3"] = 2, 1, 3
print list(c.items()), c.keys(), c.values()

输出

[('2', 2), ('1', 1), ('3', 3)] ['2', '1', '3'] [2, 1, 3]
[('1', 1), ('3', 3), ('2', 2)] ['1', '3', '2'] [1, 3, 2]
[('1', 1), ('2', 2), ('3', 3)] ['1', '2', '3'] [1, 2, 3]

关于python - 如何制作一个排序的字典类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21309374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com