Python中字典是一个很花里胡哨的东西,它可以存储几乎任意类型对象,而且使用方便;它与C++中的map容器很像,都是一个个的键值对,但它比起C++中的map容器使用起来要简洁得多;
先来看一下字典的样子:
dict = {'name':'jeha','sage':18,'sno':7277}
字典中每一个元素都是一个键值对,本例中,字典dict包含三个键值对,它们记录了学生jeha的基本信息;
字典由大括号,分割键值对的逗号,分割键与值的冒号,以及一个个键与值组成,在字典中允许值重复,但不允许键有重复,即一个字典中的所有键必须是互不相同的;不仅如此,Python要求字典中的键必须是不可变的,因此能够充当字典的键的基本数据类型有数值、字符串、以及元组,如果用允许值可变的列表来充当键就会报错;说到这里就顺便再多说一句,字典中的键尽管没有规定不允许重复,但如果你定义了重复的键,那么前一个键对应的值将会被冲走;
一.对字典的操作
1.访问、修改与添加
先新建一个字典:
dict = {'name':'jeha','sage':18,'sno':7277}
访问:
肯定是通过键来访问啦
print(dict['name'])# jeha
修改:
dict['sage'] = 16
添加:
dict['sex'] = 'girl'
2.删除
dict = {'name':'jeha','sage':18,'sno':7277}
#万能del
del dict['sno'] #删除了sno键值对
del dict #删除字典dict
#方法
del.clear() #clear()方法清空字典
del.pop(key) #根据键值删除键值对
3.遍历
dict = {'name':'jeha','sage':18,'sno':7277}
#利用方法items()遍历键值对
for k,v in dict.items():
print(k,v)
#运行:
name jeha
sage 18
sno 7277
'''
利用方法keys()只遍历键
利用方法keys()只遍历值
不再举例
'''
二.有关字典的其它方法
copy() :返回字典的副本;
get(key):返回指定键的值,如果找不到该键则返回default;
popitem():随机弹出字典中的一个键值对;
这里要多说一些:这里的popitem()虽说是随机弹出,但其实和list.pop()一样,也是弹出底层最后一个键值对,但是由于字典中键值对的存储顺序是不可知的,所以也就可以说成是随机弹出;另外,弹出的键值对在字典中将被永久删除,该方法会返回弹出的键值对,如果需要,我们可以用两个变量来接受:
k,v = dict.popitem()
update():用新建字典去更新已有字典的键值对:
dict = {'name':'jeha','sage':18,'sno':7277}
dict.update({'sage':16,'sex':'girl'}) #update里面必须也是一个字典
print(dict)
#运行:
{'name': 'jeha', 'sage': 16, 'sno': 7277, 'sex': 'girl'}
分析:sage键原有字典已有,故值被覆盖,sex键原有字典没有,故添入;
setdefault(key,default=None):基本功能与get(key)方法一样,但除此之外,如果在字典中未找到该键,将会在字典中添加该键并为它设置默认值default,返回default;
dict = {'name':'jeha','sage':18,'sno':7277}
a = dict.setdefault('sage')
print(a)
dict.setdefault('sex',16)
print(dict)
#输出:
18
{'name': 'jeha', 'sage': 18, 'sno': 7277, 'sex': 16}
三.字典和列表的优缺点
和列表相比,字典有以下优点:
1.查找与插入速度快,不会因为数据量增大而减慢
2.内存占用大;
而列表则恰好相反:
1.查找与插入速度会随着数据量的增加而变慢;
2.内存占用小;
四.嵌套
关于嵌套在前面的文章中已有介绍,此处不再细说;
部分内容(不限于本文)参考自: