【Python基础7】字典

dict字典定义

字典由及其相应的组成,这种键值对称为项(item)
键和值之间用冒号(:)分隔,项之间用逗号分隔,整个字典放在花括号内
people = {‘name’:‘Sudley’,‘age’:99}
在字典(以及其他映射类型)中,键必须是独一无二的

dict字典创建

>>> items = [('name','Sudley'),('age',99)]
>>> d = dict(items)
>>> d
{'name': 'Sudley', 'age': 99}
>>> d2 = dict(name='Sudley',age=99)
>>> d2
{'name': 'Sudley', 'age': 99}
>>>

将两个列表合成一个字典

>>> lst1 = ['name','age']
>>> lst2 = ['Sudley',99]
>>> d = dict(zip(lst1,lst2))
>>> d
{'name': 'Sudley', 'age': 99}
>>> 

基本的字典操作

  • len(d)返回字典的items数
  • d[k] 返回与键k相关联的值
  • d[k] = v 将值v关联到键k
  • del d[k] 删除键k的项
  • k in d 检查字典d是否包含键为k的项

字典和列表的主要区别

对比项字典列表
键VS索引键可以是任何不可变的类型,如整数、浮点数(实数)、字符串或元组索引是整数
自动添加对原来没有的键赋值会新建一个项无法直接对不存在的索引赋值,需要借助append等方法新增元素
成员资格(k in d)查找的是键而非值查找的是值而非索引

字典的方法

方法描述
d.clear()删除d的所有项
d.copy()返回d的副本,执行的是浅复制
d.fromkeys(seq[, val])返回一个字典,其中的键来自seq,而值都被设置为val(默认为None)。可直接使用字典类型dict将其作为类的方法来调用
d.get(key[, default])若d[key]存在,就返回它的值;否则返回指定的默认值(默认为None)
d.items()返回一个包含d各项(key,value)对的迭代器(视图)
d.iterkeys()返回一个可用于对d的键进行迭代的迭代对象
d.keys()返回一个包含所有键的迭代器(视图)
d.pop(key[, d])删除并返回对应键的值,若键不存在且设置了d则返回给定默认值d,若键不存在也没设置d则引发KeyError异常
d.popitem()随机删除一个项,并以(key,value)对的方式返回
d.setdefault(key[, default])如果d[key]存在,就返回它的值;否则返回指定的默认值(默认为None),并将d[key]设置为指定的默认值
d.update(other)将other中的每项都添加到d(可能覆盖既有的项)。也可以像调用字典构造函数那样指定类似的参数
d.value()返回一个迭代器(视图),其中包含d中所有的值(可能有重复的)

方法举例
1.clear

>>> x = {'key':'value'}
>>> y = x
>>> y
{'key': 'value'}
>>> x = {}
>>> y
{'key': 'value'}

>>> x = {'key':'value'}
>>> y = x
>>> y
{'key': 'value'}
>>> x.clear()     #注意这里没有返回值,或者说返回None
>>> y
{}
>>>

2.copy
执行的是浅复制,当替换副本中的值时,原件不受影响。如果修改副本中的值(就地修改而不是替换),原件也将发生改变。
浅复制相关概念可参考
【Python基础9】浅谈深浅拷贝及变量赋值

>>> x = {'username':'admin','machines':['foo','bar','baz']}
>>> y = x.copy()
>>> y['username'] = 'root'
>>> y['machines'].remove('bar')
>>> y
{'username': 'root', 'machines': ['foo', 'baz']}
>>> x
{'username': 'admin', 'machines': ['foo', 'baz']}
>>> y['machines'][0] = 'bar'
>>> y
{'username': 'root', 'machines': ['bar', 'baz']}
>>> x
{'username': 'admin', 'machines': ['bar', 'baz']}
>>> y['machines'] = 'bar'
>>> y
{'username': 'root', 'machines': 'bar'}
>>> x
{'username': 'admin', 'machines': ['bar', 'baz']}
>>> 

为了避免上述的问题可以执行深复制,即同时复制值及其包含的所有值,等等。

>>> from copy import deepcopy
>>> x = {'username':'admin','machines':['foo','bar','baz']}
>>> y = deepcopy(x)
>>> y['machines'].remove('bar')
>>> y
{'username': 'admin', 'machines': ['foo', 'baz']}
>>> x
{'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
>>> 

3.fromkeys

>>> dict.fromkeys(['name','age'])
{'name': None, 'age': None}
>>> dict.fromkeys(['name','age'],'NA')
{'name': 'NA', 'age': 'NA'}
>>>

4.get

>>> d = {}
>>> d['name']
Traceback (most recent call last):
  File "<pyshell#41>", line 1, in <module>
    d['name']
KeyError: 'name'
>>> d.get('name')
>>> d
{}
>>> 

5.setdefault

>>> d = {}
>>> d.setdefault('name')
>>> d
{'name': None}
>>> d.setdefault('age','NA')
'NA'
>>> d
{'name': None, 'age': 'NA'}
>>> 

6.items

>>> x = {'username':'admin','machines':['foo','bar','baz']}
>>> x.items()
dict_items([('username', 'admin'), ('machines', ['foo', 'bar', 'baz'])])
>>> y = x.items()
>>> y[0]
Traceback (most recent call last):
  File "<pyshell#57>", line 1, in <module>
    y[0]
TypeError: 'dict_items' object is not subscriptable
>>> print(y)
dict_items([('username', 'admin'), ('machines', ['foo', 'bar', 'baz'])])
>>> for i in y:   #返回值y属于一种名为字典视图的特殊类型,可用于迭代但是不能索引
	print(i)

	
('username', 'admin')
('machines', ['foo', 'bar', 'baz'])
>>> 

7.keys
和上面一样可以迭代不能索引,字典是无序的。

>>> x = {'username':'admin','machines':['foo','bar','baz']}
>>> x.keys()
dict_keys(['username', 'machines'])
>>> 

8.pop

>>> x = {'username':'admin','machines':['foo','bar','baz'],'ip':'xx'}
>>> x.pop()   #必须带键值
Traceback (most recent call last):
  File "<pyshell#68>", line 1, in <module>
    x.pop()
TypeError: pop expected at least 1 arguments, got 0
>>> x.pop('ip')
'xx'
>>> x.pop('ip')
Traceback (most recent call last):
  File "<pyshell#70>", line 1, in <module>
    x.pop('ip')
KeyError: 'ip'
>>> x.pop('ip','ip?')
'ip?'
>>> 

9.popitems

>>> x = {'username':'admin','machines':['foo','bar','baz'],'ip':'xx'}
>>> x.popitem()   #随机弹出一个项
('ip', 'xx')
>>> x.popitem()
('machines', ['foo', 'bar', 'baz'])
>>> 

10.update

>>> d = {
	'username':'root',
	'ip':'192.168.1.1',
	'tty':'1'}
>>> x = {'username':'guest','tty':'2'}
>>> d.update(x)
>>> d
{'username': 'guest', 'ip': '192.168.1.1', 'tty': '2'}
>>> y = {'username':'guest','http':'2'}
>>> d.update(y)
>>> d
{'username': 'guest', 'ip': '192.168.1.1', 'tty': '2', 'http': '2'}
>>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值