字典是非常常用的一种数据结构,它与json格式的数据非常相似,核心就是以键值对的形式存储数据,关于Python中的字典做如下四点说明:
1.构造字典对象需要用大括号表示 {},每个字典元素都是以键值对的形式存在,并且键值对之间用英文状态下的'':''隔开
2.键在字典中是唯一的,不能有重复,对于字符型的键需要用引号引起来。值可以是单个值,也可以是多个值构成的列表,元组或字典
3.字典不再是序列,无法通过为止索引完成元素值的获取,只能通过键索引实现。
4.字典与列表一样,都是可变类型的数据结构。
dict1={'姓名':'张三','年龄':'33','性别':'男','子女':{'儿子':'张四','女儿':'张美'},'兴趣':['踢球','游泳','唱歌']}
print(dict1)
print(dict1['年龄'])
print(dict1['子女']['儿子'])
print(dict1['兴趣'][1])
out:
{'姓名': '张三', '年龄': '33', '子女': {'儿子': '张四', '女儿': '张美'}, '性别': '男', '兴趣': ['踢球', '游泳', '唱歌']}
33
张四
游泳
#对于字典来说,它不再是序列,通过第一条输出的结果可知,构造时的字典元素与输出时的字典元素顺序已经发生了变化,想要获取元素的值,只能
在索引里面写入具体的键。
字典元素的基本操作方法:
1.字典元素的增加
一般使用以下三种方式实现:分别是:setdefault,update方法和键索引方法:
接上面的举例:
dict1.setdefault('户籍','合肥') #往字典中增加户籍信息 此处需要注意一点,不是('户籍':'合肥')
dict1.update({'学历':'硕士'}) #添加学历信息 通过update的方式增加,添加的是字典形式的对象
dict1['身高'] = 178 #增加身高信息 通过直接键索引的方法直接设定对象并赋值即可
2.字典元素的删除
关于字典元素的删除可以使用pop,poptiem和clear三种方法实现。
例如:
dict1.pop('户籍') #删除户籍信息
dict1['子女'].pop('女儿') #删除字典中女儿的姓名
dict1.popitem() #删除字典的最后一个元素
dict1.clear() #清除字典元素
3.字典元素的修改
字典元素的修改如增加部分提到的,也可以使用update方法和键索方法完成字典元素的修改.需要注意的是如果字典中的值是另一个字典或列表,
需要先通过键索引实现字典元素的查询,然后在查询的基础上应用对应的修改方法即可(如update方法,取而代之).如下列出另外的几个比较重要的方法:
dict2 = {'电影':['三傻大闹宝莱坞','大话西游之大圣娶亲','疯狂动物城'],
'导演':['张三','李四','刘德华'],'评分':[9.1,9.2,9.3]}
print(dict2.get('评分'))
print(dict2.keys())
print(dict2.values())
print(dict2.items())
get方法的功能与建索引已知,可以从字典中取出键对应的值.所不同的是,如果某个键在字典中不存在,应用建索引的方法出产生'键错误'的信息;
而get方法不会报错,如果没有get到的话会显示None,也就不会影响其他脚本的正常执行.keys,values和items方法分别取出字典中的所有键,值和键值对.
另外 keys(),values()和items()方法都可以用于字典的操作,值得注意一点的是,用这三个方法返回类似的列表的值,但这个返回值不是真正的列表,它们不能被修改,没有append()
方法,但这些数据类型可以用于for循环。如:
for v in spam.values():
print(v)
字典中的get()方法
在访问一个键的值之前,检查该键是否存在于字典中,这很麻烦。好在,字典有一个get()方法,它有两个参数:要取得其值的键,以及如果该键不存在事,返回的备用值,如下例题中
设置的备用值就是 0,你也可以指定 。
例如:
picnicItems = {'apples':5,'cups':2}
print(str(picnicItems.get('cups',0))+ 'cups.')
print(str(picnicItems.get('eggs',0))+ 'eggs.')
out:
2cups.
0eggs.
picnicItems字典中没有‘eggs’,get()方法返回备用值0.如有这个键就返回具体的值,如例题的是 2
setdefault()方法
常常需要为字典中的某个键设置一个默认值,当该键没有任何值时就使用它代替。
例如:
>>> spam = {'name':'Pooka','age':5}
>>> spam.setdefault('color','black')
'black'
>>> spam
{'name': 'Pooka', 'age': 5, 'color': 'black'}
>>> spam.setdefault('color','white')
'black'
>>> spam
{'name': 'Pooka', 'age': 5, 'color': 'black'}
第一次调用setdefault()时,spam变量中的字典变为:{'name': 'Pooka', 'age': 5, 'color': 'black'} 该方法返回值‘black’,因为现在该值被赋给键‘color’。当接下来
spam.setdefault('color','white'),该键的值没有被改成 white,因为spam变量已经有一个名为 color的键了。
setdefault()方法是个很好的快捷方式,可以确保一个键存在。如下:
message = 'It was a bright cold day in April ,and the clocks wre striking thirteen.'
count = {}
for character in message:
count.setdefault(character,0)
count[character] = count[character] + 1
print(count)
out:
{'I': 1, 't': 6, ' ': 13, 'w': 2, 'a': 4, 's': 3, 'b': 1, 'r': 5, 'i': 6, 'g': 2, 'h': 3, 'c': 3, 'o': 2, 'l': 3, 'd': 3, 'y': 1, 'n': 4, 'A': 1, 'p': 1, ',': 1, 'e': 4, 'k': 2, '.': 1}
如上,用setdefault()方法,确保count字典中的初始值都是0,这样执行count[character] = count[character] + 1 时就不是出现KeyError的错误;