138得票11回答
为什么在Python中不能将列表用作字典键?到底哪些可以使用,哪些不行?原因是什么?

我发现以下几种方式都是有效的:>>> d = {} >>> d[None] = 'foo' >>> d[(1, 3)] = 'baz' 甚至模块也可以用作字典的键:>>> import sys >>> d...

68得票5回答
什么会导致用户定义的类无法哈希化?

docs表示只要定义了__hash__方法和__eq__方法,一个类就可以是可哈希的。然而: class X(list): # read-only interface of `tuple` and `list` should be the same, so reuse tuple.__h...

47得票2回答
Swift: 'Hashable.hashValue'作为协议要求已被弃用;

我在我的iOS项目中遇到了以下问题(只是一个警告)。 'Hashable.hashValue'已弃用为协议要求;通过实现'hash(into:)'来符合类型'ActiveType'到'Hashable' Xcode 10.2 Swift 5 源代码:public enum A...

45得票2回答
使结构体可哈希化?

我正在尝试创建一个类似于[petInfo : UIImage]()这样的字典,但我遇到了错误Type 'petInfo' does not conform to protocol 'Hashable'。我的petInfo结构体如下:struct petInfo { var petNam...

42得票7回答
在Python中检查可变性?

考虑以下这段代码:a = {...} # a is an dict with arbitrary contents b = a.copy() 在字典的键和值中,可变性扮演了什么角色? 如何确保一个字典的键或值的更改不会反映在另一个字典中? 这与字典键的可哈希约束有什么关系? (constra...

42得票5回答
我该如何将Swift枚举用作字典键?(遵守Equatable协议)

我已经定义了一个枚举类型来表示“站点”的选择;站点由唯一的正整数定义,因此我创建了以下枚举类型,允许负值表示特殊选择:enum StationSelector : Printable { case Nearest case LastShown case List ...

42得票9回答
使用@functools.lru_cache与字典参数

我有一个方法,它需要一个字典作为参数之一。该方法解析字符串,并且字典提供了一些子字符串的替换值,因此它不需要是可变的。 由于这个函数会被频繁调用,而且针对冗余元素,所以我想到将其缓存起来可以提高效率。 但是,正如你可能已经猜到的那样,由于字典是可变的,因此无法使用@functools.lr...

37得票7回答
符合Hashable协议?

我试图创建一个字典,其中键是我创建的结构体,值是整数数组。但是,我一直收到以下错误信息: “类型'DateStruct'不符合协议'Hashable'” 我很确定我已经实现了必要的方法,但由于某种原因它仍然无法工作。 这是我的带有实现的结构体:struct DateStruct { ...

31得票2回答
如何在Swift中实现从hashValue到hash(into:)的转换?

我对编译器发出的废弃警告,不再使用hashValue而是实现hash(into:),并没有很清楚的想法。 'Hashable.hashValue'已被弃用作为协议要求; 通过实现'hash(into:)'将类型'MenuItem'符合'Hashable' Swift: 'H...

25得票2回答
为什么我不能在一个看似可哈希的方法上调用hash(),而该方法属于一个不可哈希实例?

假设我有一个字典: >>> d = {} 它有一个名为clear()的方法: >>> d.clear <built-in method clear of dict object at 0x7f209051c988> ... 其中包含一...