tinglele527

字典是非常常用的一种数据结构,它与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的错误;


分类:

技术点:

相关文章: