元组、hash函数、字典类型及特性、字典练习题

时间:2023-02-24 10:41:57

元组、hash函数、字典类型及特性、字典练习题

1 #切片
2 names = (1,2,3,4,5,6,7,['a','b'])         #创建names元组
3 print(names[2:5])                         #结果为:(3, 4, 5)
4 #修改names元组中的子列表
5 names[7][1]='B'
6 print(names)                              #结果为:(1, 2, 3, 4, 5, 6, 7, ['a', 'B'])

                                               

                                                     hash函数

元组、hash函数、字典类型及特性、字典练习题

 1 hash('alex')
 2    -1604449742078065513
 3 hash('alex')
 4    -1604449742078065513
 5 hash('abcdds')
 6    -5803160296342974153
 7 hash((1,2,3))
 8    2528502973977326415
 9 hash([1,2,3])
10    Traceback (most recent call last):
11      File "<input>", line 1, in <module>
12    TypeError: unhashable type: 'list'

 

 

                                          字典类型及特性

  • 在一个变量里存储公司每个员工的个人信息与取出每个员工的个人信息非常麻烦,那要怎么做才不麻烦呢?

 元组、hash函数、字典类型及特性、字典练习题

 

  • 字典类型与特性

            字典是Python语言中唯一的映射类型

元组、hash函数、字典类型及特性、字典练习题

 1 #定义
 2 info = {
 3     '龙婷': [24,'design','UI',23333],
 4     'shanshan': [25,'PR','wild model',135645576],
 5     'xiaotian': [22,'design','UI',5452432]
 6 }
 7 print(info)                #结果为:{'龙婷': [24, 'design', 'UI', 23333], 'shanshan': [25, 'PR', 'wild model', 135645576], 'xiaotian': [22, 'PR', 'UI', 5452432]}
 8 
 9 #查找
10 print(info['龙婷'])       #结果为:[24, 'design', 'UI', 23333]
11 
12 #修改
13 print(info['龙婷'][1])       #结果为:design
14 info['龙婷'][1] = '设计部'
15 print(info)                   #结果为:{'龙婷': [24, '设计部', 'UI', 23333], 'shanshan': [25, 'PR', 'wild model', 135645576], 'xiaotian': [22, 'design', 'UI', 5452432]}

 

  • 字典的查找速速快的原因:hash的查找速度快

     1 info = {
     2     '龙婷': [24,'design','UI',23333],
     3     'shanshan': [25,'PR','wild model',135645576],
     4     'xiaotian': [22,'design','UI',5452432]
     5 }
     6 print(hash('龙婷'))
     7 print(hash('shanshan'))
     8 S = [13334,-32424,25532,2364,3546456]
     9 S.append(3355)
    10 S.append(123334)
    11 print(S)                 #结果为:[13334, -32424, 25532, 2364, 3546456, 3355, 123334]
    12 S.sort()
    13 print(S)                 #结果为:[-32424, 2364, 3355, 13334, 25532, 123334, 3546456]
    通过折半查找(二分查找),就可以很快的查找到我们想要的值了。
     

     

  • 字典类型的查找删除添加

元组、hash函数、字典类型及特性、字典练习题

 1 #定义
 2 info = {
 3     '龙婷': [24,'design','UI',23333],
 4     'shanshan': [25,'PR','wild model',135645576],
 5     'xiaotian': [22,'design','UI',5452432]
 6 }
 7 print(info)                #结果为:{'龙婷': [24, 'design', 'UI', 23333], 'shanshan': [25, 'PR', 'wild model', 135645576], 'xiaotian': [22, 'PR', 'UI', 5452432]}
 8 
 9 
10 #查找
11 print('龙婷'in info)       #结果为:True
12 print(info.get('龙婷'))    #结果为:[24, 'design', 'UI', 23333]
13 print(info.get('龙婷1'))   #结果为:None
14 
15 print(info['龙婷'])        #结果为:[24, 'design', 'UI', 23333]
16 #print(info['龙婷2'])       #结果为:KeyError: '龙婷2'       会报错
17 
18 
19 #删除
20 print(info.pop('shanshan'))      #结果为:[25, 'PR', 'wild model', 135645576]
21 print(info)                        #结果为:{'龙婷': [24, 'design', 'UI', 23333], 'xiaotian': [22, 'design', 'UI', 5452432]}
22 
23 #添加
24 info [4] = 2
25 info [3] = 2
26 info [2] = 2
27 info [1] = 2
28 print(info)                        #结果为:{'龙婷': [24, 'design', 'UI', 23333], 'xiaotian': [22, 'design', 'UI', 5452432], 4: 2, 3: 2, 2: 2, 1: 2}
29 
30 #随机删除
31 print(info.popitem())              #结果为:(1, 2)

 

 

 

 

 

 

  • 多级字典嵌套

 

       元组、hash函数、字典类型及特性、字典练习题

 

 

  • 字典类型的详细方法

 元组、hash函数、字典类型及特性、字典练习题

元组、hash函数、字典类型及特性、字典练习题

 1 #定义
 2 info = {
 3     '龙婷': [24,'design','UI',23333],
 4     'shanshan': [25,'PR','wild model',135645576],
 5     'xiaotian': [22,'design','UI',5452432]
 6 }
 7 print(info)                #结果为:{'龙婷': [24, 'design', 'UI', 23333], 'shanshan': [25, 'PR', 'wild model', 135645576], 'xiaotian': [22, 'PR', 'UI', 5452432]}
 8 
 9 #字典的其他方法:
10 #清空字典(字典级别的操作):
11 info.clear()
12 print(info)               #结果为:{}
13 
14 #添加
15 info = {'alex':[24,'IT'],'rain':[24,'HR'],'jack':22}
16 print(info)               #结果为:{'alex': [24, 'IT'], 'rain': [24, 'HR'], 'jack': 22}
17 
18 print(info.keys())        #结果为:dict_keys(['alex', 'rain', 'jack'])           只打印key
19 
20 print(info.values())      #结果为:dict_values([[24, 'IT'], [24, 'HR'], 22])      打印values
21 
22 print(info.items())       #结果为:dict_items([('alex', [24, 'IT']), ('rain', [24, 'HR']), ('jack', 22)])      相当于将字典转换为列表
23 
24 dic2 = {1:2,2:3,'jack':[22,'Jack Ma','Alibaba CEO']}
25 print(info)               #结果为:{'alex': [24, 'IT'], 'rain': [24, 'HR'], 'jack': 22}
26 info.update(dic2)         #类似于list中的extend方法
27 print(info)               #结果为:{'alex': [24, 'IT'], 'rain': [24, 'HR'], 'jack': [22, 'Jack Ma', 'Alibaba CEO'], 1: 2, 2: 3}    如果之前字典上有对应的值就会被覆盖掉,没有则会创建
28 
29 print(info.setdefault(2,'New 2'))           #结果为:3         如果里面对应的值,会返回
30 print(info.setdefault('test','New 2'))     #结果为:New 2     如有里面没有对应的值,则会创建
31 print(info)                                  #结果为:{'alex': [24, 'IT'], 'rain': [24, 'HR'], 'jack': [22, 'Jack Ma', 'Alibaba CEO'], 1: 2, 2: 3, 'test': 'New 2'}
32 
33 print(info.fromkeys(['A','B','C']))         #结果为:{'A': None, 'B': None, 'C': None}
34 print(info.fromkeys(['A','B','C'],'alex')) #结果为:{'A': 'alex', 'B': 'alex', 'C': 'alex'}实际应用先生成空字典,再批量插入值;
35 
36 
37 #字典的循环
38 #最常用的字典循环方法
39 for k in info:
40     print(k)
41     print(k,info[k])
42 
43 #低效率,先把字典转化成列表再循环(不建议使用)
44 for k,v in info.items():
45     print(k,v)

 

 

 

                                                     字典练习题

 写代码,有如下字典,按照要求实现每一个功能dict = {"k1":"v1","k2":"v2","k3":"v3"}

1、请循环遍历出所有的key

1 dict = {'k1':'v1','k2':'v2','k3':'v3'}
2 for k in dict :
3     print(k)

 

2、请循环遍历出所有的value

1 dict = {'k1':'v1','k2':'v2','k3':'v3'}
2 for k in dict :
3     print(dict[k])

 

3、请循环遍历出所有的key和value

1 dict = {'k1':'v1','k2':'v2','k3':'v3'}
2 for k in dict :
3     print(k,dict[k])

 

4、请在字典中增加一个键值对,"k4":"v4",输出添加后的字典

1 dict = {'k1':'v1','k2':'v2','k3':'v3'}
2 dict ['k4']= 'v4'
3 print(dict)

 

5、请删除字典中键值对"k1":"v1",并输出删除后的结果

1 dict = {'k1':'v1','k2':'v2','k3':'v3','k4':'v4'}
2 dict.pop('k1','v1')
3 print(dict)

 

6、请删除字典中键"k5"对应的键值对,如果字典中不存在键"k5",则不报错,返回None

1 dict = {'k1':'v1','k2':'v2','k3':'v3','k4':'v4'}
2 print(dict.get('k5'))

 

7、请获取字典中"k2"对应的值

1 dict = {'k1':'v1','k2':'v2','k3':'v3','k4':'v4'}
2 print(dict.get('k2'))

 

8、请获取字典中"k6"对应的值,如果不存在,则不报错,并且让其返回None。

1 dict = {'k1':'v1','k2':'v2','k3':'v3','k4':'v4'}
2 print(dict.get('k6'))

 

 9、现有dict2 = {"k1":"v1","a":"b"},通过一行操作使dict2 = {"k1":"v1","k2":"v2","k3":"v3","a":"b"}

1 dict = {'k1':'v1','k2':'v2','k3':'v3','k4':'v4'}
2 dict2 = {'k1':'v1','a':'b'}
3 dict.update(dict2)
4 print(dict)

 

10、组合嵌套题。写代码,有如下列表,按照要求实现每一个功能

"""
lis = [["k",["qwe",20,{"k1":["tt",3,"1"]},89],"ab"]]
1、将列表 lis 中的‘tt’变成大写(用两种方法)
2、将列表中的数字 3 变成字符串"100"(用两种方法)
3、将列表中的字符串"1"变成数字101(用两种方法)
"""
 1 lis = [["k",["qwe",20,{"k1":["tt",3,"1"]},89],"ab"]]
 2 print(lis)
 3 # 10.1 方法1:
 4 print(lis[0][1][2].get("k1")[0].upper())
 5 # 10.1 方法2:
 6 print(lis[0][1][2].get("k1")[0].swapcase())
 7 
 8 
 9 # 10.2 方法1:
10 lis[0][1][2]["k1"][1] = '100'
11 print(lis)
12 # 10.2 方法2:
13 lis[0][1][2].get("k1")[1]= '100'
14 print(lis)
15 
16 
17 # 10.3 方法1:
18 lis[0][1][2]["k1"][2] = 101
19 print(lis)
20 # 10.3 方法2:
21 lis[0][1][2].get("k1")[2]=101
22 print(lis)

 

 

11、按照要求,实现如下功能:

"""
现有一个列表li = [1,2,3,'a',4,'c'],有一个字典(此字典是动态生成的,你并不知道他里面有多少
键值对,所以用dic={}模拟字典;现在需要完成这样的操作:如果该字典没有"k1"这个键,那就创建 这个"k1"键和对应的值(该键对应的值为空列表),并将列表li中的索引位为奇数对应的元素,添加到 "k1"这个键对应的空列表中。如果该字典中有"k1"这个键,且k1对应的value是列表类型。那就将该列表li 中的索引位为奇数对应的元素,添加到"k1",这个键对应的值中。 """
 1 li = [1,2,3,'a',4,'c']
 2 dic = { }
 3 if 'k1' not in dic :
 4     dic.setdefault('k1',[])
 5     for i in li :
 6         if li.index(i) % 2 == 1 :
 7             dic['k1'].append(i)
 8         else :
 9             if type(dic['k1']) == type([]) :
10                 for i in li :
11                     if li.index(i)%2 == 1 :
12                         dic['k1'].append(i)
13             else :
14                print('k1对应的value不是列表类型,无法追加')
15 print(dic)