2016 - 2024

感恩一路有你

python列表里面找字典对应的值 python如何输入字典的名称?

浏览量:3518 时间:2023-05-17 08:56:07 作者:采采

python如何输入字典的名称?

它是通过字典赋值来实现的。先写变量,然后把写好的字典数据赋给变量,简单来说就是变量dict大括号。通过以这种分配变量,可以通过直接调用变量名来使用字典。这个变量名就是字典的名字,它所指向的内存地址不会改变,这是唯一的数据。

如何理解Python中的集合和字典?

字典和集合是高度优化的数据结构,特别是对于查找、添加和删除操作。本节将通过示例介绍它们在特定场景中的性能,并将它们与列表等其他数据结构进行比较。

例如,有一个存储产品信息(产品ID、名称和价格)的列表,现在的需求是借助产品ID找出价格。实现代码如下:

定义查找_产品_价格(产品,product_id):

对于id,products:的价格

如果我是product_id:

退货价格

不返回

产品[

(111, 100),

(222, 30),

(333, 150)

]

打印(产品222的价格是{}。格式(find_product_price(products,222)))

运行结果如下:

产品222的价格是30英镑

在上述方案的基础上,如果链表有n个元素,由于搜索过程需要遍历链表,那么最坏情况下的时间复杂度为O(n)。即使先对列表进行排序,再使用二分搜索法算法,也要O(logn)时间复杂度,更不用说O(nlogn)时间对列表进行排序了。

但是如果用字典来存储这些数据,那么查找会非常方便高效,而且可以用O(1)的时间复杂度来完成,因为不需要遍历字典,直接通过键的哈希值就可以找到对应的值。实现代码如下:

产品{

111: 100,

222: 30,

333: 150

}

打印(产品222的价格是{}。格式(产品[222])

运行结果如下:

产品222的价格是30英镑

一些读者可能对时间复杂性不感兴趣。它不 如果你有直观的理解,这并不重要。我再给你举个例子。在下面的代码中,初始化100,000个元素的产品,分别计算使用list和set统计产品价格数量的运行时间:

#统计时间需要使用时间模块中的函数,就知道了。

导入时间

def find_unique_price_using_list(products):

唯一价格列表[]

对于_,products:的价格# A

如果价格不在unique_pric: # B

唯一价格(价格)

return len(唯一价格列表)

id[范围(0,100000)中x的x]

价格[x对x,在范围(200000,300000)内]

产品列表(邮政编码(id,价格))

#计算列表版本的时间

start_using_list _counter()

查找_唯一_价格_使用_列表(产品)

end_using_list _count: { }打印(经过的时间)。格式(结束使用列表开始使用列表)

#使用集合做同样的工作

def find_unique_price_using_set(products):

unique_price_set集合()

对于_,products:的价格

唯一价格(价格)

return len(唯一价格集)

#计算集合版本的时间

启动使用设置计数器()

查找_唯一_价格_使用_集合(产品)

end_using_set _count: { }打印(经过的时间)。格式(结束使用设置开始使用ng_s: 68的时间流逝。56866 . 66666666667

使用s: 0.01表示时间流逝。58660.08888888861

可见两者在只有10万条数据的情况下,速度相差如此之大。而企业的后台数据往往是几亿甚至几十亿的量级。因此,如果使用不合适的数据结构,很容易导致服务器崩溃,不仅影响用户体验,还会给公司带来巨大的财产损失。

那么,为什么字典和收藏的效率如此之高,尤其是查找、插入和删除的操作?

字典和收藏的工作原理。

字典和集合的效率与其内部数据结构密切相关。与其他数据结构不同,字典和集合的内部结构是哈希表:

对于字典来说,这个表存储三个元素:散列、键和值。

对于集合,哈希表中只存储一个元素。

对于以前版本的Python,其哈希表结构如下:

|哈希值(哈希)键值(值)

。|...

0 |哈希0键0值0

。|...

1 | hash1 k:·迈克,dob: 1999-01-01,g:男}

然后,它将以类似于下面的形式存储:

条目[

[ - , - , - ]

[-230273521,出生日期,1999年1月1日],

[ - , - , - ],

[ - , - , - ],

[1231236123,姓名,迈克],

[ - , - , - ],

[9371539127,性别,男]

]

显然,这是对存储空间的极大浪费。为了提高存储空间的利用率,目前的哈希表除了字典本身的结构之外,还会将索引与哈希值、键和值分开,就是下面这种结构:

指数

-

无|索引|无|无| index |无|索引...

-

进入

-

哈希0键0值0

-

hash1 key1值1

-

hash2键2值2

-

...

-

在此基础上,上述字典在新哈希表结构下的存储形式为:

索引[无,1,无,无,0,无,2]

条目[

[1231236123,姓名,迈克],

[-230273521,出生日期,1999年1月1日],

[9371539127,性别,男]

]

通过对比可以发现,空间利用率有了很大的提高。

明确具体的设计结构,然后分析如何使用哈希表完成数据的插入、查找和删除。

哈希表插入数据

在向字典中插入数据时,Python会先根据键(通过hash(key)函数)计算出相应的哈希值,而在向集合中插入数据时,Python会根据元素本身(通过hash (value)函数)计算出相应的哈希值。

例如:

dic {nam:1}

打印(哈希(名称))

s《哈希表详解》 "可以细读。

哈希表查找数据

在哈希表中查找数据类似于插入操作。Python会根据哈希值找到元素在哈希表中应该存放的位置,然后将其哈希值和key与该位置的元素进行比较(集合直接比较元素值):

如果它们相等,就证明找到了;

另一方面证明了元素存储的时候遇到了哈希,需要继续用原来的方法解决哈希,直到找到元素或者找到空位。

这里发现的空白意味着目标元素没有存储在哈希表中。

哈希表删除元素

对于删除操作,Python会临时给这个位置的元素赋一个特殊值,然后在哈希表调整大小时删除它。

应该注意的是,哈希的发生通常会降低字典和集合操作的速度。因此,为了保证其效率,集合中的字典和哈希表通常会保证至少留有1/3的剩余空间。随着元素的不断插入,当剩余空间不足1/3时,Python会重新获得更多的内存空间并扩展哈希表,同时表中所有的元素位置都会重新排出。

字典 时间 产品 列表

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。