如何在Python 3中使用列表作为字典的键?

2021年4月14日14:12:52 发表评论 2,749 次浏览

本文概述

在Python中, 我们使用词典检查是否存在项目。字典使用核心值配对以搜索键是否存在, 以及键是否存在。我们可以使用整数, 字符串, 元组作为字典键, 但不能使用列表作为键。原因如下。

Python词典如何搜索其键
 

如果Python字典只是遍历其键以检查给定键是否存在, 则将花费上)时间。但是python字典需要O(1)检查键是否存在。因此, 字典如何搜索关键字, 因为它为每个关键字生成一个散列值对于键, 并通过此哈希值, 它可以跟踪其元素。

如果将列表用作字典的键, 则会出现问题
 

列表是可变对象这意味着我们可以更改列表内的值, 以追加或删除列表的值。因此, 如果从列表生成哈希函数, 然后更改列表的项, 则字典将为此列表生成一个新的哈希值, 并且找不到它。

例如, 如果列表是a = [1、2、3、4、5]并假设列表的哈希值是列表内部值的总和。因此hash(a)=15。现在我们将6附加到a。所以a = [1、2、3、4、5、6]hash(a)=21。因此, 哈希值已更改。因此, 它在词典中找不到。

另一个问题是具有相同哈希值的不同列表。如果b = [5、5、5]hash(b)=15。因此, 如果在字典中存在a(来自上述示例, 具有相同的哈希值), 并且我们搜索b。然后字典可能给我们错误的结果。

如何处理 

我们可以将列表更改为不可变的对象, 例如字符串或元组, 然后将其用作键。下面是该方法的实现。

# Declaring a dictionary
d = {} 
  
# This is the list which we are 
# trying to use as a key to
# the dictionary
a = [ 1 , 2 , 3 , 4 , 5 ]
  
# converting the list a to a string
p = str (a)
d

= 1 # converting the list a to a tuple q = tuple (a) d[q] = 1 for key, value in d.items(): print (key, ':' , value)

输出如下:

[1, 2, 3, 4, 5] : 1
(1, 2, 3, 4, 5) : 1

注意怪胎!巩固你的基础Python编程基础课程和学习基础知识。

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: