字典
-
创建和使用字典
-
字典由多个键与其对应的值构成的对组成。
phonebook={"Alice":"10086","Bob","10010"}
名字是键,电话号码是值。每个电话号码和值之间用冒号“:”隔开。每个项之间用“,”隔开。整个字典用的大括号括起来“{}”。
dict 函数
可以用dict函数,通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典。
list=[("name","Alice"),("age",21)]
d=dict(list)
print(d)
dict函数通过关键字参数来创建字典
d=dict(name="Alice",age=21)
print(d)
基本字典操作
- len(d) 返回d中项(键-值对)的数量
- d[k] 返回关联到键k上的值
- d[k]=v 将值v关联到键k上
- del d[k] 删除键为k的项
- k in d 检查d中是否含有键为k的项
字典方法
-
clear
- clear方法清除字典中所有的项。这是一个原地操作,无返回值(也可以说返回值是None)。
d={}
d["name"]="Alice"
d["age"]=21
print(d)
d.clear()
print(d)
returned_value=d.clear()
print(returned_value)
-
copy
- copy方法返回一个具有相同键-值对的新字典(此方法实现的是浅拷贝(shallow copy))
x={"username":"admin","skill":["shoot","fire"]}
y=x.copy()
y["username"]="Alice"
y["skill"].remove("fire")
print(y)
print("-"*30)
print(x)
观察结果可以看出,在副本中替换值的时候,原始字典并不受影响。但是,倘若修改某个值(原地修改,而非替换),那么同样的值也会存储到原始地点中。这就是浅拷贝的特点。
解决办法是使用深拷贝(deep copy)。
from copy import deepcopy #导入copy包中的deepcopy模块
x={"username":"admin","skill":["shoot","fire"]}
y=x.copy()
dy=deepcopy(x)
y["username"]="Alice"
y["skill"].remove("fire")
print(y)
print("-"*30)
print(x)
print("-"*30)
print(dy)
关于深拷贝于浅拷贝的区别日后再议。
-
get
- get方法是一个访问字典项的方法。如果试图访问字典中不存在的项时会报错但是用get就不会
d={}
print d["name"]
-
items和iteritems
-
-
items方法将所有的字典以列表的方式返回,这些列表的每一项都来自于(键,值)。但是返回时并没有特殊的顺序。
*iteritems方法的作用基本一致,但是会返回一个迭代器对象而不是列表。
keys和iterkeys
-
items方法将所有的字典以列表的方式返回,这些列表的每一项都来自于(键,值)。但是返回时并没有特殊的顺序。
- keys方法将字典中的键以列表形式返回,而iterkeys返回针对键的迭代器。 popitem
- popitem类似于list.pop,后者会弹出列表的左后一个元素。但是popitem弹出的是随机的项,原因是字典没有顺序的概念,但是仍可以用这个方法一个一个移除并处理项。 update
- update方法是用一个字典项更新另外一个字典,提供的字典中的项会被添加到旧的字典中去,如果有相同的键则会被覆盖。
d={
"title":"python",
"size":"20",
"value":"23"
}
x={"size":"28"}
d.update(x)
print(d)