词典和集的基础
字典由一系列关键值映射元素组成。在Python 3.7 +中,一本字典被确定为在3.6之前订购,一本字典被无序。其长度是可变的,元素可以任意删除和更改。与列表和图集相比,字典的性能更好,尤其是在搜索、添加和删除操作方面。字典可以在不断的时间复杂性内完成。一套和一本字典基本相同,唯一的区别是一套没有钥匙值配对,是一系列无序和独特的元素组合。
首先,让我们来看看词典和收藏品的创作。通常有以下方法:
>d2=听写({"姓名":"杰森","年龄":20,"性别":"男性"})3d3格言([("姓名""杰森")("年龄"20岁)、("性别""男性")])
4d4口述(姓名="杰森"年龄=20性别="男性")
5d1d2d3==d4
67出真
请注意,Python 中的字典和集,无论是键还是值,都可以是混合类型的0:
蟒
x
11s={1"你好"5.0}
让我们来看看元素访问的问题。字典可以直接访问索引:如果它不存在,将抛出一个例外:
蟒
x
1101d[名称]
3出"杰森"
4d[位置]
5---------------------------------------------------------------------------
6基埃罗追踪(最近一次通话)
7<蟒蛇-输入-10-46d978634ca1>在<模块>()
8基埃罗尔: "位置"
我们也可以使用这个功能
get(key, default)
。如果密钥不存在,则函数get()
返回默认值。例如,以下案例返回"空"。您也可以使用该
get(key, default)
功能进行索引。如果密钥不存在,请调用get()
该功能以返回默认值。例如,以下示例返回"空"。d = {'name': 'jason', 'age': 20}
d.get('name')
Out: 'jason'
d.get('location', 'null')
Out: 'null'字典访问后,让我们再看看设置。
首先,我想强调,该集不支持索引操作,因为该集本质上是一个哈希表,这与列表不一样。因此,以下操作是错误的,Python 将抛出一个例外。
蟒
x
11>[0]3类型跟踪回溯(最近一次呼叫)
4<蟒蛇-输入-15-c9c96910e542>在<模块>()
5----=1s[0]
67类型"设置"对象不支持索引
要判断元素是在字典中还是在集中,我们可以在听写/设置中使用值1便士:" >={1,2,3}
21在s
3出真
410在s
5出假
67d={"名称""杰森""年龄"20}
8d中的"名称"
9>"位置"11出假
除了创建和访问之外,字典和集还支持添加、删除和更新等操作。
蟒
x
1181d[性别]= "男性"
3d["多布"'1999-02-01'
4d
5出:{'年龄'20'多布''1999-02-01''性别''男性''名称''杰森'}
67d["多布"'1998-01-01'
8d.流行("多布")
9出'1998-01-01'
10:{'年龄':20,'性别':'男性','名称':'杰森'}
1213s={123}
14。添加(4)
15s
16出:{1234}
1718。删除(4)
19>:{1,2,3}但请注意,无论
pop()
一组操作是删除最后一个元素,设置本身是无序的,您无法知道哪个元素被删除。因此,必须谨慎使用操作。
在实际应用中,在许多情况下,我们需要对字典或一套字典进行排序,例如,取出价值最大的 50 对字典或一套字典。对于字典,我们通常根据密钥或值按升序或降序排序:
蟒
x
11d_sorted_by_key = 排序(d.项目(),键=兰姆达x:x[0])
3d_sorted_by_value排序(d.项目密钥=兰姆达x[1])
4d_sorted_by_key
5出:[("a"2)、("b"1)、("c"10)]
6d_sorted_by_value
7出:[("b"1)、("a"2)、("c"10)]
此处返回列表
至于设置,排序与上述列表和图盘非常相似。只需直接调用
sorted(set)
,结果将返回排序列表。蟒
x1s={3421}
2排序(s)
3例如,电子商务公司的后端存储每个产品的 ID、名称和价格。目前的需求是,鉴于某种产品的 ID,我们希望了解其价格。
如果我们使用列表存储这些数据结构并搜索它们,相应的代码如下:蟒
x
1171>,产品的价格:3如果id product_id:
4退货价格
5返回无
6
7产品 =[
8(143121312100
9(43231455330)
10]
1213打印("产品432314553的价格是{}"。格式(find_product_price(产品432314553))
141516##Out:产品价格432314553是30
假设列表具有 n 元素,并且搜索过程需要遍历列表,则时间复杂性为 O(n)。即使我们先对列表进行排序,然后使用二进制搜索,也需要 O(logn) 时间复杂性,更不用说列表的排序仍需要 O(nlogn) 时间复杂性。
但是,如果我们使用字典来存储这些数据,那么查找将非常方便和高效,并且它只能在 O(1) 时间复杂性的情况下完成。原因也很简单。正如我们前面提到的,字典的内部组成是一个哈希表,您可以直接通过密钥的哈希值找到其相应的值格式(产品[432314553])
##Out:产品432314553的价格是30"数据朗="文本/x-巨蛇">
x
11091产品 ={
2143121312100,
343231455330,
4}
6打印("产品432314553的价格是{}"。格式(产品•432314553
789##Out:产品价格432314553是30
同样,我们现在需要找出这些商品有多少不同的价格。让我们以同样的方式比较它们。
如果您仍然选择使用该列表,相应的代码如下,其中 A 和 B 为两级循环。此外,假设原始列表具有 n 元素,那么,在最坏的情况下,需要 O(n^2) 时间复杂性。
蟒
x
1151定义find_unique_price_using_list(产品):
2unique_price_list
3产品价格:#A
4>unique_price_list.附录(价格)6返回伦(unique_price_list)
7产品
8(143121312100
9(43231455330
10(32421912367150
11(93715320130)]
12打印("唯一价格的数量是:{}"。格式(find_unique_price_using_list(产品) )
1314
蟒
x
1151定义find_unique_price_using_set(产品
2>_,产品价格:4unique_price_set.添加(价格
5返回伦(unique_price_set)
6产品
7(143121312100)
8(43231455330)
9(32421912367150)
10]
12打印("唯一价格的数量是:{}"。格式(find_unique_price_using_set(产品))
1314##Out:唯一价格的数量是:3
以下代码初始化包含 100,000 个元素的产品,并计算使用列表和设置来计算产品价格和数量所需的时间:
蟒
x
120