字典 dict

  • key-value键值对的数据的集合
  • 可变的、无序的(不可以索引)、key不重复

初始化




Python字典如何直接加入2个元素 python中给字典加多个值_迭代


Python字典如何直接加入2个元素 python中给字典加多个值_迭代_02

标识符赋值(最常用)


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_03

二元可迭代对象构建

Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_04

后面跟引用类型[100]的时候是进行id拷贝创建(id一样)

元素访问


Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_05

用key访问,数字,字符串和某情况下的的元组可以用哈希做key访问

Python字典如何直接加入2个元素 python中给字典加多个值_键值对_06

set里面都是key,所以也报KeyError

Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_07


增加和修改


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_08


Python字典如何直接加入2个元素 python中给字典加多个值_迭代_09

添加

  • 更新:用新的二元可迭代对象去更新原来的字典,进行元素比对,存在就覆盖,不存在就添加(不太常用)


Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_10

字典也是可迭代的对象

Python字典如何直接加入2个元素 python中给字典加多个值_键值对_11

字典是无序的

字典的删除


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_12

删除一般不会使用缺省值,容易产生误导

  • pop弹出(返回键值对)


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_13

key的类型错误

Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_14

弹出,会返回弹出的数值,但字典中已不存在

  • 随机pop(返回值)


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_15


Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_16


  • del语句

Q:d = {'a':1, 'b':b, 'c':[1,3,5]} del d['c'] 是删除了一个对象[1,3,5]么?

A:元素对象仍存在,删除的是元素对象与其地址之间的关联关系,但表面上看起来是将字典中的元素对象删除了,本质上减少了一个对象的引用del实际上删除的是名称而不是对象,删除本质上是交给GC的(Py中是这样,C++不一样)


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_17

删除的是标识符与地址两者之间的关联关系(引用计数减一)

Python字典如何直接加入2个元素 python中给字典加多个值_迭代_18

b无法访问。成功删除,因为b指向的地址被忘记;d可以,因为其中的一个键值对还记录着对应值的地址

Python字典如何直接加入2个元素 python中给字典加多个值_键值对_19


Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_20


删除元素要慎重!一定要清楚自己要删除的是什么!

  • clear可能会存在垃圾回收,要考虑好

字典的遍历

  • 取key


Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_21


  • 取value


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_22


Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_23


Python字典如何直接加入2个元素 python中给字典加多个值_迭代_24


动态视图:(entry指的是item)字典发生变化,视图(提取内容)也发生变化,并且不占用内存


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_25

返回了一个可迭代的对象,你向我要数据,我再去原数据处再去取(视图),类似于range,并不会开辟内存来存储原数据的数据(不会产生内存的copy)

Python字典如何直接加入2个元素 python中给字典加多个值_键值对_26


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_27

在for迭代的过程中,当你每次循环的时候用到了迭代对象的视图时,迭代对象的长度是不可以改变的(增删是不可以的,读和修改是可以的)

Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_28


移除value是字符串的项:


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_29

迭代内记录,在迭代外删除

Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_30


字典的key(去重) !!

key是为了便于快速查找的(纳秒级的,与set一样)


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_31

set是一种特殊的字典(可哈希=不可变)



Python字典如何直接加入2个元素 python中给字典加多个值_键值对_32


Python字典如何直接加入2个元素 python中给字典加多个值_迭代_33


value是不等长的list:


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_34

写法1

Python字典如何直接加入2个元素 python中给字典加多个值_迭代_35

写法2

defaultdict (缺省字典,默认是null):


Python字典如何直接加入2个元素 python中给字典加多个值_迭代_36


当访问某key并为其赋value值时,key并不在(KeyError),就按着defaultdict设定的要求建立:


Python字典如何直接加入2个元素 python中给字典加多个值_迭代_37


字典添加是无序


Python字典如何直接加入2个元素 python中给字典加多个值_迭代_38


Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_39


IPython3.5下版本无法保证顺序(mini_python)


Python字典如何直接加入2个元素 python中给字典加多个值_迭代_40

不启动虚拟环境,直接指定

Python字典如何直接加入2个元素 python中给字典加多个值_迭代_41

在其下面安装IPython

IPython中显示不出来:


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_42

直接启动Pyhton

Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_43

3.6之后打印顺序就是输入的顺序

有序字典:(强于3.6特性)


Python字典如何直接加入2个元素 python中给字典加多个值_键值对_44


Python字典如何直接加入2个元素 python中给字典加多个值_迭代_45


初始化的过程的顺序是无法保证的,但是后添加的顺序是可以保证的:


Python字典如何直接加入2个元素 python中给字典加多个值_迭代_46

有序是按照你的写入顺序来的

Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_47

也可利用sort进行后排序替代

key可以自定义函数,比较强大!!



Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_48


下面是关于一些字典练习我的写法,大家可以提出自己的想法,一起交流。


Python字典如何直接加入2个元素 python中给字典加多个值_迭代_49

练习1

Python字典如何直接加入2个元素 python中给字典加多个值_py 字典添加多个value_50

练习2

Python字典如何直接加入2个元素 python中给字典加多个值_键值对_51

练习三的小部分知识点