Python 字典
0X00 什么是字典
字典,顾名思义就是通过一个条件可以找到相应的值,字典由Key-Value组成。像是下面这样创建一个字典 字典中的数据是没有顺序的,不像列表一样有顺序,在字典中是没有固定顺序的
1>>> a = {'name':'xiaoming', 'sex':'F', 'age':22} #直接创建一个字典
2>>> print a
3 {'age': 22, 'name': 'xiaoming', 'sex': 'F'}
4>>> print a['name']
5 xiaoming
6
7>>> b = dict(name='xiaogang', sex='M', age=23) #通过dict函数创建一个字典
8>>> print b['name']
9 xiaogang下文说的Key就是键, Value就是值 Key-Value 就是键值对,一个键对应着一个值 Key的值是可以随意改变的,但是Key的类型是固定的不能改变 如果为一个不存在的键赋值,那么会自动添加这个K-V
0X01 字典操作
len 测量长度
测量这个字典中有多少
1>>> d = {'username':'admin', 'password':'123456')
2>>> print len(d)
3 2d[k] 调用字典
根据已知的Key来查找Key所对应的Value
1>>> d = {'username':'admin', 'password':'123456'}
2>>> print d['username']
3 admind[k] = v 字典赋值
为某个特定的Key赋值,如果这个Key在字典中不存在则创建这个Key
1>>> d = {'username':'admin', 'password':'123456'}
2>>> d['password'] = '2336666'
3>>> print d['password']
4 2336666del d[k] 删除Key-Value
删除相应的Key和Value
1>>> d = {'username':'admin', 'password':'123456'}
2>>> del d['username']
3>>> print d
4 {'password': '123456'}
5>>> del d['username'] #删除一个不存在的K-V会抛出异常
6 Traceback (most recent call last):
7 File "<stdin>", line 1, in <module>
8 KeyError: 'username'k in d 成员检查
检查某字典中是否存在某Key,成员检查时用的是Key而不是Value
1>>> d = {'username':'admin', 'password':'123456'}
2>>> 'username' in d
3 True
4>>> 'phonenumber' in d
5 False0X02 字典的递归
字典中是Key-Value,然而字典的Value是可以是字典的,也就是Key-Value的Value是字典,也就是递归。 这样就可以建立一个递归的字典,字典里的字典可以是一层一层递归包括下去
1>>> phones = {
2 'xiaoming':{
3 'num':'123',
4 'addr':'hebei'
5 },
6 'xiaohua':{
7 'num':'456',
8 'addr':'sichuan'
9 }
10 }
11>>> print phones
12 {'xiaoming': {'num': '123', 'addr': 'hebei'}, 'xiaohua': {'num': '456', 'addr': 'sichuan'}}
13>>> print phones['xiaoming']
14 {'num': '123', 'addr': 'hebei'}
15>>> print phones['xiaoming']['addr']
16 hebei0X03 字典方法
字典有好多方法可以调用,对字典进行操作
clear 清除
clear可以清除字典所有项,这项操作是直接操作原来的字典而不是修改字典然后返回新的字典 下面展示一下这个方法的用处 A
1>>> x = {}
2>>> y = x
3>>> x['key'] = 'value'
4>>> y
5 {'key': 'value'}
6>>> x = {}
7>>> y
8 {'key': 'value'}B
1>>> x = {}
2>>> y = x
3>>> x['key'] = 'value'
4>>> y
5 {'key': 'value'}
6>>> x.clear()
7>>> y
8 {}对比A和B这两种情况,就大概知道什么时候clear方法可以发挥用处了
copy 复制
可以复制一个全新的字典出来,并返回这个新的字典。字典的复制分为浅度复制和深度复制 浅度复制
1>>> x = {'username':'admin', 'machines':['foo', 'bar', 'baz']}
2>>> y = x.copy()
3>>> y['username'] = 'mlh'
4>>> y['machines'].remove('bar')
5>>> y
6 {'username': 'mlh', 'machines': ['foo', 'baz']}
7>>> x
8 {'username': 'admin', 'machines': ['foo', 'baz']}深度复制
1>>> from copy import deepcopy
2>>> d = {}
3>>> d['names'] = ['Alfred', 'Bertrand']
4>>> c = d.copy()
5>>> dc = deepcopy(d)
6>>> d['names'].append('Clive')
7>>> c
8 {'names': ['Alfred', 'Bertrand', 'Clive']}
9>>> dc
10 {'names': ['Alfred', 'Bertrand']}fromkeys 空字典
使用给定的键来建立一个没有值的字典,也可以给一个默认的值让所有键的值都是这个默认值
1>>> dict.fromkeys(['name', 'age']) #一个纯空的字典
2 {'name': None, 'age':None}
3>>> dict.fromkeys(['name', 'age'], 'unknow') #给键创建一个默认值
4 {'name':'unknow', 'age':'unknow'}get 获取
比较宽松的获取数据,以前用d[k]的方式调用一个值的话,如果这个键不存在就会抛出异常,用get获取就不会这样
1>>> d = {}
2>>> print d.get('name') #获取一个不存在的数据,不会抛出异常,而显示None
3 Nonehas_key 判断键
判断字典中是否有这个键,返回True和False
1>>> d = {'name':'admin', 'password':'123456'}
2>>> d.has_key('name')
3 True
4>>> d.has_key('hehe')
5 Falseitems iteritems 返回字典
items 可以将整个字典转化成列表并返回 iteritems 可以将整个字典转化成迭代器返回
1>>> d = {'username':'admin', 'password':'123'}
2>>> d.items()
3 [('username', 'admin'), ('password', '123')]
4>>> d.iteritems()
5 <built-in method iteritems of dict object at 0x7f62ac08e6e0>
6>>> list(d.iteritems())
7 [('username', 'admin'), ('password', '123')]keys iterkeys 返回键
keys 以列表的方式返回整个字典中所有的key iterkeys 以迭代器的方式返回整个字典中所有的key
1>>> d = {'username':'admin', 'password':'123'}
2>>> d.keys()
3 ['username', 'password']
4>>> d.iterkeys()
5 <dictionary-keyiterator object at 0x7f62ac0972b8>pop 出栈
因为字典中是没有顺序的,所以出栈的时候必须自己指定一个Key才能弹出这个K-V,如果了解“栈”这个数据结构的话就能非常清晰这个方法。使用pop弹出一个数据的时候回在原字典中删除这个数据并返回这个数据。
1>>> d = {'username':'admin', 'password':'123'}
2>>> d.pop('password')
3 '123'
4>>> d
5 {'username': 'admin'}popitem 随机出栈
随机从字典中弹出一组K-V
1>>> d = {'one':'1', 'two':'2', 'three':'3', 'four':'4', 'five':'5', 'six':'6'}
2>>> d.popitem()
3 ('six', '6')
4>>> d.popitem()
5 ('three', '3')
6>>> d.popitem()
7 ('two', '2')
8>>> d.popitem()
9 ('four', '4')
10>>> d.popitem()
11 ('five', '5')
12>>> d.popitem()
13 ('one', '1')setdefault 设置默认
给字典中某个Key设定一个默认的Value,当这个Key没有Value的时候就默认为那个默认的Value,如果有数据则默认Value不会生效
1>>> d = {}
2>>> d.setdefault('name', 'N/A')
3 'N/A'
4>>> d
5 {'name': 'N/A'}
6>>> d['name'] = 'admin'
7>>> d.setdefault('name', 'N/A')
8 'admin'
9>>> d
10 {'name': 'admin'}update 更新字典
可以用一个新的字典去更新旧的字典,新旧字典中Key重合的部分以新字典为准,旧字典中有的Key且新字典中没有的话则不变,旧字典中没有的Key且新字典中有的话则添加这个K-V
1>>> a = {'username':'admin', 'password':'123456'}
2>>> b = {'password':'2336666', 'sex':'F'}
3>>> a.update(b)
4>>> a
5 {'username': 'admin', 'password': '2336666', 'sex': 'F'}values intervalues
values 返回字典中所有的值组成的列表 intervalues 返回字典中所有的值相应的迭代器
如果这篇文章对你有帮助,可以请我喝杯咖啡 ☕
评论