python定义一个int_在python中创建一个可散列的int列表

用元组作为键就行了。元组是不可变的和散列的,所以它们作为字典键很有用。list_of_ints = [1, 20, 3, 4]

# tuple(list_of_ints) == (1, 20, 3, 4)

some_dict = {tuple(list_of_ints): "some value", ...}

值得注意的是,它们确实关心顺序,因此[1, 20, 3, 4]不会产生与[1, 3, 20, 4]相同的值

你甚至可以为自己创建一个容器。class MyDict(dict):

def __getitem__(self, key):

key = tuple(sorted(key))

return super().__getitem__(key)

# similar for pop, get, setdefault, update....

>>> d = MyDict()

>>> d[1,2,3] = 4

>>> d[3,2,1]

4

不要试图自己序列化它。如果你这样做了,不要使用字符串操作——它太难看了。如果你真的内存不足,或者你有成百上千条这样的记录,你可以通过序列化来节省不重要的空间,比如:def my_serialize(key_nums: list):

key_nums = sorted(key_nums)

base = max(key_nums)

sum_ = 0

for power, num in enumerate(key_nums):

sum_ += base**power * num

return sum_

这应该会给你一个独特的(难以置信的大!)要在内存中存储的比元组小的整数。如果你能避免的话就不要这样做——它是非常不透明的。

在您提到的注释中,键中不会有重复的值,因此frozenset绝对是您要找的。d = {}

list_of_ints = [1, 20, 3, 4]

d[frozenset(list_of_ints)] = "some value"

^{}对象是不可变的可散列的set类对象。它们是不可知论的,忽略了重复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值