gpt4 book ai didi

python - 为什么 Python 的行为就像我的字典是一个列表?

转载 作者:行者123 更新时间:2023-12-05 03:22:56 30 4
gpt4 key购买 nike

编辑

谢谢大家!更改了 _sort 函数,现在可以使用了。

原帖

我正在尝试创建一个排序的 dict 类,以此来混淆 dunder 方法。我知道collections.OrderedDict存在。

当我尝试重载 __getitem__ 时或 __setitem__ , Python 就好像我试图用字符串键索引列表一样。这是我的类(class)代码:

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____getitem__它打印为键列表的功能,但在构造函数中它打印为字典。我错过了什么?

最佳答案

如评论中所述,sorted(self.map) 返回已排序的 map 键的列表。要获得排序的字典,您可以这样做

def _sort(self):
self.map = dict(sorted(self.map.items()))

这将为您提供 {'a': 2, 'b': 3, 'test1': 1, 'test2': 2}

关于python - 为什么 Python 的行为就像我的字典是一个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72590339/

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