Python字典
1. 字典
d = {"name":"zhangsan", "age":18}
dict的键必须是唯一的,但值则不必,键必须是不可边的,如字符串,数组或元祖。
2. dict函数
可以使用dict函数,通过其他映射(比如其他字典)或者(键,值)对的序列建立字典
items=[('name',"John"), ("age", 42)] d=dict(items) print("d:",d) print(d["name"]) d1=dict(name="John", age=42) print("d1:",d1) print(d1["name"]) >>> d: {'name': 'John', 'age': 42} >>> John >>> d1: {'name': 'John', 'age': 42} >>> John
3. 基本字典操作
字典的基本行为在很多方面与序列类似:
len(d)
d[key]
d[key] = value
del d[key]
key in d
people = { "zhangsan":{"age":18, "phone":"2341"}, "lisi":{"age":30, "phone":"8888"} } name = input("Name:") request = input("age(a) or phone(h)?") if request == "a": key = "age" elif request == "p": key = "phone" if name in people: print ("%s's %s is %s" %(name,key,people[name][key]))
注:在Python3中已经将raw_input和input整合成了input,去除了raw_input()函数,其接受任意输入, 将所有输入默认为字符串处理,并返回字符串类型
4. 字典的格式化字符串
在前面Python字符串博客中已经介绍了python字符串,下面我们看看格式化在字典中的应用:
template = ''' <head><title>%(title)s</title></head> <body> <h1>%(title)s</h1> <p>%(text)s</p> </body> ''' data = {"title":"my web", "text":"welcome to my home page"} print(template %(data))
5. 字典方法
(1)clear 清除字典中所有的项
(2)copy
说到拷贝一定离不开浅拷贝和深拷贝的话题,下面通过例子进行说明
例1:
d = {"name":"zhangsan", "info":{"age":16, "sex":"man"}} d1 = d d2 = d.copy() print("d's ID:%d" %(id(d))) print("d1's ID:%d" %(id(d1))) print("d2's ID:%d" %(id(d2)))
可以看出d和d1的地址相同,d2的地址不同
例2:
d = {"name":"zhangsan", "info":{"age":16, "sex":"man"}} d1 = d d2 = d.copy() d2["name"] = "lisi" print("d:", d) print("d2:", d2) d2["info"]["age"] = 88 print("d:", d) print("d2:", d2)
修改以后,name不同,age相同,这就是浅拷贝的最好说明
解决浅拷贝的最好方法就是深拷贝,Python中提供了copy模块中的deepcopy
例3:
d = {"name":"zhangsan", "info":{"age":16, "sex":"man"}} from copy import deepcopy d2 = deepcopy(d) d2["name"] = "lisi" print("d:", d) print("d2:", d2) d2["info"]["age"] = 88 print("d:", d) print("d2:", d2)
(3)fromkeys
使用给定的键建立新的字典,每个键都对应一个默认的值None
d = {}.fromkeys(["name", "age"]) print(d) d1 = dict.fromkeys(["name", "age"]) print(d1) d2 = dict.fromkeys(["name", "age"], ("undefine")) print(d2)
注:无法给“name”,"age"不同的默认值
(4)get
get函数是我觉得相当重要又很有意思的一个函数,有意思就在于它在访问一个不存在的键时,没有任何异常,而得到None值,还可以自定义“默认值”,替换None
d ={"name":"zhangsan", "age":18} print(d.get("sex","man"))
>>> man
(5)has_key 检查字典中是否含有某个特定的键
(6)items
items将字典中的所有的项一列表方式返回,注意,返回时没有遵循特定的顺序
d ={"name":"zhangsan", "age":18, "sex":"man"} print(d.items()) >>> [('name', 'zhangsan'), ('age', 18), ('sex', 'man')]
(7)keys
同上,将字典中的键值以列表的方式返回
(8)pop
pop方法获得对应键的值,然后将这个键-值从字典中移除
(9)popitem
随机的一个一个地移除项,我觉得用处不大
(10)setdefault
setdefault方法在某种程度上类似于get方法
为指定的键设置值,若键存在返回键所对应的值,若键不存在,返回设置的值,并更新字典
d ={"name":"zhangsan", "age":18, "sex":"man"} print (d.setdefault("name", "lisi")) print(d) print(d.setdefault("addr", "wuhan")) print(d)
(11)update
可以利用一个字典项更新另一个字典项