[英]How to make a sorted dictionary class?
我很難寫一個類,它應該能夠遍歷排序的dicitonary。 我的主要問題是iter-overload。 我不怎么把dic排序。
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]
感謝Poke和Martijn Pieters幫我解決這個問題。
你可以看到collections.OrderedDict
, dict
和SortedDict
之間的區別。
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]
由於您願意在開始迭代時進行排序,因此您只需要:
def __iter__(self):
return iter(sorted(self.dic))
__iter__
必須返回一個迭代器,內置函數iter()
從鍵的排序列表中獲取一個。 完成工作,不需要next()
函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.