編輯
謝謝大家!更改了 _sort 函式,現在它可以作業了。
原帖
我正在嘗試創建一個排序的 dict 類,作為弄亂 dunder 方法的一種方式。我知道collections.OrderedDict存在。
當我嘗試多載__getitem__or__setitem__時,Python 的行為就像我嘗試使用字串鍵索引串列一樣。這是我的課程代碼:
class SortedDict:
def __init__(self, **kwargs):
self.map = dict(kwargs)
self._sort()
def __str__(self):
return str(self.map)
def __getitem__(self, key):
return self.map[key]
def __setitem__(self, name, value):
self.map[name] = value
def keys(self):
return self.map.keys()
def add(self, **kwargs):
for key in kwargs:
self.map[key] = kwargs[key]
self._sort()
indices = dict()
for key in kwargs.keys():
indices[key] = self.index(key)
return indices
def remove(self, *args):
for key in args:
self.map.pop(key)
def index(self, key: str):
keys = list()
for dict_key in self.map.keys():
keys.append(dict_key)
return keys.index(key)
def contains(self, key: str):
return key in self.map
def _sort(self):
self.map = sorted(self.map)
當我執行以下代碼進行測驗時__getitem__:
from sorted_dict import SortedDict
test_dict= SortedDict(test1=1, test2=2, a=2, b=3)
print(test_dict['test1'])
我收到此錯誤:
Traceback (most recent call last):
File "c:\Users\Chris\Desktop\Code\DMC2\mapping_editor\tree.py", line 16, in <module>
print(test_dict['test1'])
File "c:\Users\Chris\Desktop\Code\DMC2\mapping_editor\sorted_dict.py", line 11, in __getitem__
return self.map[key]
TypeError: list indices must be integers or slices, not str
嘗試使用時出現類似的錯誤__setitem__。我正在使用 VS 代碼,當我將游標懸停self.map在其中任何一個函式上時,型別顯示為dict[str, Any] | list[str]. 如果我self.map在任何一個函式中列印型別,它都會列印<class 'list'>,但是當我self.map在建構式中列印類時,它會列印為<class 'dict'>,這是我所期望的。當我self.map在__setitem__or__getitem__函式中列印時,它會列印為鍵串列,但在建構式中它會像字典一樣列印。我錯過了什么?
uj5u.com熱心網友回復:
如評論中所述,sorted(self.map)回傳排序map鍵的串列。要獲得排序字典,您可以這樣做
def _sort(self):
self.map = dict(sorted(self.map.items()))
這會給你{'a': 2, 'b': 3, 'test1': 1, 'test2': 2}。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/489295.html
標籤:Python python-3.x
