Dict_字典

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dict_字典相关的知识,希望对你有一定的参考价值。

字典,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 ‘‘‘

 

以上是关于Dict_字典的主要内容,如果未能解决你的问题,请参考以下文章

Python代码阅读(第19篇):合并多个字典

Dict_字典

将字典分配给类对象

__dict__(字典的另一种用法)

Python:如何禁用在属性字典中创建新键?

人生苦短_我用Python_dict(字典)_003