字典
---------
是 iterable,但不是序列
#### 字典的有序性?
python2 中字典无序
python3.6 中至少cpython的dict实现细节有序,但并非语言功能,不应被依赖
python3.7中,dict有序成为语言功能,可依赖
#### dict vs list
dict:查找和插入的速度极快,不会随着key的增加而变慢,但内存占用大
list:查找和插入的时间随着元素的增加而增加,内存占用小
key
-----
- key唯一,不可变。
- key只能取值不可变对象,如:str、types、tuple、数字、bool、None
- key取值可变对象时报错!
- key取值bool、None:True和False会被当做1、0处理,None仍是None
- key重复出现,则后面值覆盖前面值
- 读取字典时,key不存在则报错!
~~~
{[]:1} # 报错!key不可变
{}['foo'] # 报错!key不存在
{b'123':111, (1,2):222, -1.2e-3:333}
{1:111, True:222, 0:333, None:444} # {1: 222, 0: 333, None: 444}
~~~
增删改查
---------
增:
~~~
d[k] = value
D.update()
~~~
删:
~~~
del d[k1], d[k2]...
D.clear()
D.pop(k[,d])
D.popitem()
~~~
改:
~~~
if k in d:
d[k] = value
d.setdefault(k[,d])
~~~
查:
~~~
if k in d:
d[k]
d.get(k[,d])
~~~
dict 函数/方法
----------------
`len()`
`str()`
### ---- 增 ----
#### update()
~~~
D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
If E is present and has a .keys() method, then does: for k in E: D[k] = E[k]
If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v
In either case, this is followed by: for k in F: D[k] = F[k]
~~~
- `D.update()`只接受一个参数:字典或类L.items()型数据(如 [(1, 111), (2, 222)])
~~~
d = {1:11, 2:22}
l = [(1, 111), (3, 333)]
d.update(l)
d # {1: 111, 2: 22, 3: 333}
~~~
### ---- 删 ----
#### del
- del var1[,var2[,var3[....,varN]]]] -- 删除单个或多个对象的引用
- del 是语句,而不是函数或方法
~~~
d = {1:11, 2:22}
del d[1], d[2]
~~~
#### clear()
~~~
D.clear() -> None. Remove all items from D.
~~~
~~~
d = {1:11, 2:22}
d.clear()
d # {}
~~~
#### pop()
~~~
D.pop(k[,d]) -> v
~~~
- k存在:返回其对应值
- k不存在:d不为空则返回d,否则报错!
~~~
d = {1:11, 2:22}
d.pop() # 报错!至少一个参数
d.pop(1) # 11
d.pop(3) # 报错!
d.pop(3, 33) # 33
~~~
#### popitem()
~~~
D.popitem() -> (k, v) -- 随机返回并删除字典中的一对键和值
~~~
- dict为空则报错
~~~
{}.popitem()
{1:11, 2:22}.popitem()
~~~
### ---- 改 ----
#### setdefault()
~~~
D.setdefault(k[,d])
~~~
D.get(k,d), also set D[k]=d if k not in D,d默认None
~~~
l = {1:11, 2:22}
l.setdefault(3)
l # {1:11, 2:22, 3:None}
l.setdefault(4, 44) # {1:11, 2:22, 3:None, 4:44}
~~~
### ---- 查 ----
#### get()
~~~
D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.
~~~
~~~
l = {1:11, 2:22}
l.get(1) # 11
l.get(3) # None
l.get(3, 33) # 33
~~~
### ---- 检测 ----
#### in
~~~
1 in {1:11, 2:22} # True
~~~
### ---- 迭代 ----
`keys()`
`values()`
`items()`
~~~
dict = { 1 : 2, 'a' : 'b', 'hello' : 'world' }
dict.keys() # ['a', 1, 'hello']
dict.values() # ['b', 2, 'world']
dict.items() # [('a', 'b'), (1, 2), ('hello', 'world')]
~~~
### ---- 拷贝 & 创建 ----
`D.copy()`
`copy.copy()`
`copy.deepcopy()` -- 深拷贝
~~~
d = {1:11, 2:22}
d1 = d.copy()
import copy
d2 = copy.copy(d)
~~~
#### fromkeys()
~~~
fromkeys(iterable, value=None, /) method of builtins.type instance
~~~
- 以iterable元素为key创建新dict,value初始值默认为None
~~~
dict.fromkeys((1,2)) # {1: None, 2: None}
''.fromkeys((1,2)) # {1: None, 2: None}
{'a':'A'}.fromkeys((1,2)) # {1: None, 2: None}
dict.fromkeys((1, 2), 'foo') # {1: 'foo', 2: 'foo'}
~~~
- 前言
- Python编程规范
- 编码
- 代码
- 缩进、行宽、引号、空行
- 空格
- 换行
- import
- 注释
- 代码注释
- 文档注释(Docstring)
- 命名规范
- 数据结构
- 变量
- 变量作用域
- 命名空间
- 作用域
- python作用域
- 对象
- 序列
- 可迭代对象
- 迭代器
- 生成器
- 可迭代对象 & 迭代器 & 生成器
- 整数池 & 字符串intern
- 数据类型
- 数字
- int
- float
- NaN
- 四舍五入 & 取整
- 列表
- 元组
- 字典
- 集合
- 字符串
- 字符集&字符编码
- 字符串&字节串
- 字符串函数
- 字符串格式化
- str.format
- Formatted string literals
- format函数
- string.Formatter类
- %
- Format String Syntax
- Format Specification Mini-Language
- fill
- align
- sign
- #
- 0
- width
- grouping_option
- .precision
- type
- locale
- Python3 locale 模块
- 语句
- 运算符
- if/else
- for...in
- while
- break/continue
- 函数
- 函数
- 函数参数
- 递归函数
- 匿名函数
- 高阶函数
- map
- reduce
- filter
- sorted
- 返回函数
- 闭包
- 装饰器
- 函数装饰器
- 带参数的装饰器
- 类装饰器
- 带参数的类装饰器
- 偏函数
- 面向对象
- 类 & 实例
- 属性
- 方法
- 访问限制
- 继承
- 新式类 & 经典类
- MRO
- MixIn
- 模块
- 特殊变量
- 编写模块
- 引入 & 重载
- 搜索模块
- 第三方模块
- 常见模块
- 标准库
- os
- sys
- datetime
- re
- urllib
- time/datetime
- threading
- multiprocessing
- builtins
- help
- range
- enumerate
- 异同
- str() repr() ascii()
- exit()、sys.exit()、os._exit()
- 数据库
- mysql
- 错误、调试、测试
- 异常
- 异常处理
- 自定义异常
- 抛出异常
- 调试
- logging
- pdb
- 线程&&进程
- 线程
- 杂
- python 脚本传参
- python无关
- redis
- mongo
- linux
- mysql简略