基础知识——字典

空字典

空字典(没有任何项)用两个花括号表示,即{}

基本的字典操作

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

字典方法

1、clear
方法clear删除所有的字典项,这种操作是就地执行的,因此什么都不返回。

>>> d = {}
>>> d['name'] = 'gumby'
>>> d['age'] = 42
>>> d
{'name': 'gumby', 'age': 42}
>>> return_value = d.clear()
>>> d
{}
>>> print(return_value)
None
>>>

看看下面两个场景,场景一:

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

场景二:

>>> x = {}
>>> y = x
>>> x['key'] = 'value'
>>> y
{'key': 'value'}
>>> x.clear()
>>> y
{}

场景一中,通过将一个空字典赋给x来“清空”它。这对y没有影响,它依然指向原字典。如果要删除原来字典的所有元素,必须使用clear。这样做的话y也将是空的。如第二个场景所示。

2、copy
方法copy返回的是一个新字典,新字典的键值与原来的字典相同,(这个方法执行的是浅复制,因为值本身是原件,而非副本)

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

由上述代码可知,当替换副本中的值时,原件不受影响。然而,如果修改副本中的值,原件也将发生变化,因为原件指向的也是被修改的值。
为避免这种问题,一种办法是执行深复制,即同时复制值及其包含的所有值,可使用模块copy中的函数deepcopy。

>>> from copy import deepcopy
>>> d = {}
>>> d['names'] = ['Alfred','Bertrand']
>>> c = d.copy
>>> dc = deepcopy(d)
>>> d['names'].append('Clive')
>>> c
{'names': ['Alfred', 'Bertrand']}
>>>dc
{'names': ['Alfred', 'Bertrand']}

3、fromkeys
方法fromkeys创建一个新字典,其中包含指定的键,且每个键对应的值都是None。

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

这个实列首先创建了一个空字典,再对其调用方法fromkeys来创建另一个字典,这显得有点多余。你可以直接对dict调用fromkeys。

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

如果不想使用默认值,可以自己设定。

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

4、get
方法get为访问字典项提供了宽松的环境,通常,如果你试图访问字典中没有的项,将引发错误。

>>> d = {}
>>> print(d['name'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'name'

如果使用get不会这样

>>> d = {}
>>> print(d.get('name'))
None

也可以指定默认值

>>> d.get('name','N/Y')
'N/Y'

如果能够找到指定的键,get的作用将与普通字典查找相同。

>>> d['name'] = 'eric'
>>> d.get('name')
'eric'

5、items
方法items返回一个包含所有字典项的列表,其中每个元素都是(key,value)的形式。字典项在列表中的排列顺序不确定。

>>> t = {'title':'python web site','url':'htttp://www.python.org','span':0}
>>> t.items()
dict_items([('title', 'python web site'), ('url', 'htttp://www.python.org'), ('span', 0)])

确定长度和成员资格检查。

>>> d = t.items()
>>> len(d)
3
>>> ('span',0) in d
True

6、keys
方法keys返回一个字典视图,包含指定字典中的键。
7、pop
方法pop可用于获取与指定相关联的值,并将该键-值对从字典中删除。

>>> d = {'x':1,'y':2}
>>> d.pop('x')
1
>>> d
{'y': 2}

8、popitem
方法popitem随机的弹出一个字典项,字典的顺序是不确定的。
9、setdefault
方法setdefault有点像get,因为它也获取与指定键相关联的值,但除此之外,setdefault还在字典不包含指定的键时,在字典中添加指定的键值对。

>>> t = {}
>>> t.setdefault('name','N/A')
'N/A'
>>> t
{'name': 'N/A'}
>>> t['name'] = 'guan'
>>> t.setdefault('name','N/A')
'guan'
>>> t
{'name': 'guan'}

当指定的键不存在时,setdefault返回指定的值并相应的更新字典。如果指定的键存在,就返回其值,并保持字典不变。与get一样,值是可选的,如果没有指定,默认值为None。

>>> k = {}
>>> print(k.setdefault('name'))
None
>>> k
{'name': None}

10、update
方法update使用一个字典中的项来更新另一个字典。
11、values
方法values返回一个由字典中的值组成的字典视图。不同于方法keys,方法values返回的视图可能包含重复的值。

>>> d[1] = 1
>>> d[2] = 2
>>> d[3] = 3
>>> d[4] = 1
>>> d.values()
dict_values([1, 2, 3, 1])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值