字典
列表这种数据结构适合将值组织到一个结构中,并通过编号对其进行引用。而字典通过名字来引用值的数据结构,也就是映射。
创建和使用字典
- dict函数
>>> items = [("name","liu"),("age","25")]
>>>> m = dict(items)
>>> m
{'name': 'liu', 'age': '25'}
- 基本字典操作
- len(m) 返回m中项的数量
- m[k] 返回关联到键k上的值
- m[k] = v 将值v关联到键k上
- del m[k] 删除键为k的值
- k in m 检查m中是否含有键为k的项
- 字典的键不一定为整型数据,键可以是任意的不可变类型
- 即使键起初在字典中不存在,也可以为它赋值
- 表达式k in m 查找的是键不是值
>>> m
{'name': 'liu', 'age': '25'}
>>> len(m)
2
>>> m["name"]
'liu'
>>> m["age"] = 22
>>> m
{'name': 'liu', 'age': 22}
>>> del m["age"]
>>> "age" in m
False
>>> "name" in m
True
>>>
>>> x = {}
>>>> x[12] = "test"
>>> x
{12: 'test'}
- 字典方法
- clear
clear方法清除字典中的所有的项
#第一种情况
>>> x = {}
>>> y = x
>>> x["key"] = "value"
>>> x = {}
>>> y
{'key': 'value'}
#第二种情况
>>> x = {}
>>> y = x
>>> x["v"] = "k"
>>> y
{'v': 'k'}
>>> x.clear()
>>> y
{}
- copy
copy方法返回一个具有相同键值对的新字典,(这个方法实现是浅复制)
>>> x = {"name":"a1","test":[1,2,3]}
>>> y = x.copy()
>>> y["name"] = "a2"
>>> y["test"].remove(2)
>>> x
{'name': 'a1', 'test': [1, 3]}
>>> y
{'name': 'a2', 'test': [1, 3]}
深复制需要使用copy模块的deepcopy函数来完成操作
>>> from copy import deepcopy
>>> d = {}
>>> d["name"] = ["d1","d2"]
>>> c = d.copy()
>>> dc = deepcopy(d)
>>> d["name"].append("d3")
>>> d
{'name': ['d1', 'd2', 'd3']}
>>> c
{'name': ['d1', 'd2', 'd3']}
>>> dc
{'name': ['d1', 'd2']}
- fromkeys
fromkey方法使用给定的键建立新的字典,每个键都对应一个默认的值None
>>> {}.fromkeys(["name","age"])
{'name': None, 'age': None}
- get
get方法访问字典项,如果试图访问字典中不存在的键时,没有任何异常,得到了None值,也可以自定义默认值
>>> d.get("name")
['d1', 'd2', 'd3']
>>> print(d.get("age"))
None
>>> print(d.get("age","NA"))
NA
- item和iteritems
item方法将字典所有项以列表的形式返回,列表中的每一项都表示为键值对的形式
iteritems方法的作用大致相同,但会返回一个迭代器对象而不是列表 - keys和iterkeys
key方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器 - pop
pop方法用来移除给定键的值,返回此值
>>> x
{'x1': '1', 'x2': '2', 'x3': '3'}
>>> x.pop("x2")
'2'
>>> x
{'x1': '1', 'x3': '3'}
- popitem
popitem方法类似于list.pop,后者会弹出列表的最后一个元素,但不同的时,popitem弹出随机的项,因为字典并没有”最后的元素“ - setdefault
setdefault方法与get类似,都能获取给定键的值。除此之外,setdefault还能在字典不含有给定键的情况下设定相应的键值。
>>> d = {}
>>> d.setdefault("name","NA")
'NA'
>>> d
{'name': 'NA'}
>>> d["name"] = "d1"
>>> d.setdefault("name")
'd1'
- update
update方法可以传入一个字典项更新另外一个字典
>>> d = {"name":"d1","age":"22"}
>>> c = {"name":"c1"}
>>> d.update(c)
>>> d
{'name': 'c1', 'age': '22'}
- values和itervalues
values方法以列表的形式返回字典中的值