字典,dict。Python中最重要的数据类型 ^_^
eg.
1 dict1 = {"name":"python","age":"29"}
1、dict格式:
{"key":"value",}
一个key(键)对应一个value(值),组成一对映射关系,将多个映射关系用花括号框起来,用逗号分隔,就组成了dict字典。
2、dict特性:
1)键唯一:
不同于list或tuple类型,dict不使用索引取值,而是以key为取值参数;
这个特性就要求key必须唯一。
举个栗子(自己理解):
一个班中30多人,可以有两个或多个名字一样的,但是学号却肯定不同,而这个学号就是唯一识别码,就是key。
2)无序:
承接第1个特性,既然不是以索引取值,那么,每组映射关系所在的位置就无关紧要。
举个栗子(自己理解):
在一个班中的某一组(列),有10名学生(假设没有同名),编号分别为0-9,那么:
在list中,根据索引(即0-9)来定位学生:坐在编号为8的那个起来下;
在dic中,不用这个麻烦,直接就是:那个谁谁谁起来下。
3、dict的创建:
1)方法1(直接赋值,常用):
1 dict1 = {"name":"python","paiming":1}
2)方法2(利用工厂函数,不常用):
1 dict2 = dict((("name","python"),))
或
1 dict3 = dict({"name":"python"}) # 不如直接赋值
4、dict的操作(增删改查):
1)增:
1 #(1) 2 dict4 ={"name":"python"} # 创建一个dict 3 dict4["age"] = 18 #添加一组映射(key-value) 4 print(dict4) #结果{"name":"python","age":18} 5 6 #(2) 7 dict5 = {"name":"python"} 8 dict5.setdefault("age",19) #此方法,如果key已有,不更新,否则,添加一组。 9 print(dict5) #结果{"name":"python","age":19} 10 ‘‘‘ 11 setdefault: 12 有返回值, 13 如果dict中有相同的key,不改变dict,返回dict中相应的value; 14 如果dict中没有相同的key,则会先加入一组key:value,并返回value。 15 ‘‘‘
2)查:
根据key取value,略。
取dict所有的key:
1 dict6 = {"name":"python","age":19} 2 print(dcit6.keys()) #打印所有key。结果,dict_keys(["name","age"])。 3 print(type(dict6.keys())) #所有key的结果并不是list,而是dict_keys类型(python3)。 4 print(list(dict6.keys())) #这里将结果转换成一个list。 5 6 print(dict6.values) #打印所有value。 7 8 print(list(dict6.items())) # 打印所有key-value。结果[("name","python"),("age",19)]
3)改:
1 dict7 = {"name":"python","age":19} 2 3 #(1)单项修改 4 dict7["age"] = 20 5 6 #(2)批量修改 7 dict8 = {"age":21,"islan":True} 8 dict7.update(dict8) 9 print(dict7) #结果,{"name":"python","age":21,"islan":True},有相同key,会覆盖
4)删:
1 dict8 = {"name":"python","age":19,"islan":True} 2 3 #(1)单个删除 4 # del dict8["name"] #删除了一组映射关系(key-value) 5 # print(dict8) #结果 {"age":19,"islan":True} 6 7 #(2)清空 8 # dict8.clear() #虽然clear能清空dict,但dict本身还是存在的 9 # print(dict8) #结果 {} 10 11 #(3)单个删除2 12 # dict8.pop("age") #pop方法有返回值,就是被删除的key-value中的value. 13 # print(dict8) #结果 {"name":"python","islan":True} 14 15 #(4)不靠谱删除 16 # dict8.popitem() #dict是无序的,所以本方法是随机删除一组映射(key-value),没啥用啊。 17 # print(dict8) 18 19 #(5)删除dict 20 # del dict8 #删除整个dict,包括dict本身 21 # print(dict8) #会报错,因为dict8本身已经被删除,内存里没有这个dict了。
5、dict其他操作
1)创建dict
1 dict9 = dict.fromkeys(["key1","key2","key3"],"value") #不常用 2 print(dict9) #结果 {‘key1‘: ‘value‘, ‘key2‘: ‘value‘, ‘key3‘: ‘value‘} 3 dict9["key1"] = "value1" 4 print(dict9) #value不为list,没问题。结果 {‘key1‘: ‘value1‘, ‘key2‘: ‘value‘, ‘key3‘: ‘value‘} 5 6 #该种方法问题: 7 dict10 = dict.fromkeys(["key1","key2","key3"],["value1","value2"]) 8 print(dict10) #结果{‘key1‘: ["value1","value2"], ‘key2‘: ["value1","value2"], ‘key3‘: ["value1","value2"]} 9 dict10["key1"][1] = "value3" 10 print(dict10) 11 ‘‘‘ 12 期望结果: 13 {‘key1‘: ["value1","value3"], ‘key2‘: ["value1","value2"], ‘key3‘: ["value1","value2"]} 14 实际结果: 15 {‘key1‘: ["value1","value3"], ‘key2‘: ["value1","value3"], ‘key3‘: ["value1","value3"]} 16 17 ‘‘‘
2)dict嵌套
1 #嵌套(dict-dict-list) 2 dict11 = { 3 "1st":{ 4 "python":["脚本语言","很流行"] 5 }, 6 "2nd":{ 7 "C":["高级语言"] 8 }, 9 "3rd":{ 10 "java":["高级语言","也很流行"] 11 }, 12 } 13 14 #增删改查,以修改为例。 15 # 修改python的“脚本语言” 16 dict11["1st"]["python"][1] = "编程语言" 17 print(dict11) #{‘1st‘: {‘python‘: [‘脚本语言‘, ‘编程语言‘]}, ‘2nd‘: {‘C‘: [‘高级语言‘]}, ‘3rd‘: {‘java‘: [‘高级语言‘, ‘也很流行‘]}}
3)排序sorted
1 #排序 2 dict11 = {"islan":"True","age":"18","1":"haha"} 3 print(sorted(dict11)) #对key进行排序,结果 [‘1‘, ‘age‘, ‘islan‘] 4 print(sorted(dict11.values())) #对value进行排序,结果[‘18‘, ‘True‘, ‘haha‘] 5 ‘‘‘ 6 注意,dict11中的key "1"不能为1(即要排序的话,类型得一致),否则排序时会报错: 7 TypeError: ‘<‘ not supported between instances of ‘int‘ and ‘str‘。 8 9 注意,dict没有内置sort方法,所以这个不能用:dict.sort() 10 ‘‘‘
4)dict的遍历
1 #遍历 2 dict12 = {"name":"python","age":"19"} 3 #(1)推荐用法,效率高。 4 for i in dict12: #i遍历的是dict中的key 5 print(i,dict12[i]) 6 ‘‘‘ 7 结果1: 8 name python 9 age 19 10 ‘‘‘ 11 #(2)有转换,牺牲了部分效率。 12 for items in dict12.items(): #items遍历的就是dict的key-value对。 13 print(items) 14 ‘‘‘ 15 结果2: 16 (‘name‘, ‘python‘) 17 (‘age‘, ‘19‘) 18 ‘‘‘ 19 #(3)同2 20 for keys,values in dict12.items(): 21 print(keys,values) 22 ‘‘‘ 23 结果3: 24 name python 25 age 19 26 ‘‘‘
时间: 2024-10-28 23:30:47