python基础教程六(字典方法)

字典方法

与其他内置类型一样,字典也有方法。字典的方法很有用,但其使用频率可能不高。

1. clear

方法clear删除所有的字典项,这中操作时就地执行的(就像list.sort一样),因此什么都不返回。

>>> d={}
>>> d
{'name': 'gumby'}
>>> d.clear()
>>> d
{}

这为何很有用呢?我们来看俩个场景。下面是第一个场景:

>>>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最初都指向同一个字典。在第一个场景中,我通过将一个空字典赋给x来清空它。这对y没有任何影响,它依然指向原来的字典。这种行为可能正是你想要的,但是要删除原来字典的所有元素,必须使用clear。如果这样做,y也是空的,如第二个场景

2. copy

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

>>> x={123:'asdsad','qianfuzhi':[1,2,3,4]}
>>> y=x.copy()
>>> y[123]='hahah'
>>> y['qianfuzhi'].remove(1)
>>> x
{123: 'asdsad', 'qianfuzhi': [2, 3, 4]}
>>> y
{123: 'hahah', 'qianfuzhi': [2, 3, 4]}

看到浅复制的含义了吗,很迷惑是不是,那就对了,我们复制过来值都可以把他们想象成一个指针,你可以拿c语言指针来解释,我们复制过来的值恐怕是指针,你直接操作字典中的值,只需要改变指针指向就好了,但是你要操作的是指针内部的数据,那就不对了,那x和y在’qianfuzhi’这项的值都是一样的指针,你改变里边的数当然都会改变。这个要怎么改变呢,就需要用到深复制 ,使用copy中的deepcopy函数解决,仔细猜想一下深复制就是把值复制另一内存之后再把复制之后的指针给z,所以操纵不影响原来的了,仅仅是猜想

>>> from copy import *
>>> x={123:'asdsad','qianfuzhi':[1,2,3,4]}
>>> y=x.copy()
>>> z=deepcopy(x)
>>> x['qianfuzhi'].append(5)
>>> y
{123: 'asdsad', 'qianfuzhi': [1, 2, 3, 4, 5]}
>>> x
{123: 'asdsad', 'qianfuzhi': [1, 2, 3, 4, 5]}
>>> z

3. fromkeys

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

>>> {}.fromkeys(['asda',123,456])
{'asda': None, 123: None, 456: None}

如果你不想使用默认值none,可以提供特定的值

>>> {}.fromkeys(['asda',123,456],123)
{'asda': 123, 123: 123, 456: 123}

4. get

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

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

而使用get不会这样

>>> print(d.get('name'))
None

如你水煎,使用get来访问不存在的键时,没有引发异常,而是返回none。你可指定默认值

>>> d.get('name','N/A')
'N/A'
如果字典包含的特定的键,get的作用将与普通字典查找相同。

```python
>>> d['123']=123
>>> d.get('123')
123

5. items

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

>>> d.items()
dict_items([('123', 123)])

返回值属于名为字典视图的特殊类型。字典视图可用于迭代,另外,你还可确定其长度以及对其执行成员资格检查。

视图的一个有点是不复制,他始终是底层字典的反应,即使你修改了底层字典也是如此

>>> d
{'123': 123, '234': 1}
>>> ('234',0) in it
False
>>> d['234']=0
>>> ('234',0) in it
True

然而,如果你要将字典项复制到列表中可以自己动手做
p=list(d.items())

6. keys

方法keys返回一个字典视图,其中包含指定字典中的键。

7. pop

方法pop可以用于获取与指定键相关联的值,并将该键-值对从字典中删除

>>> d
{'123': 123, '234': 3}
>>> d.pop('123')
123
>>> d
{'234': 3}

8. popitem

方法popitem类似于list.pop,但list.pop弹出列表最后一个元素,popitem随机弹出一个字典项,因为字典项的顺序是不确定的,没有’最后一个元素的概念’。如果你要以高效地方式逐个删除并处理所有字典项,这可能很有用

9. setdefault

方法setdefault有点像get,因为它也获取与指定键相关的值,但除此之外,setdefault还在字典不包含指定的键,在字典中添加指定的键-值对。

>>> d={}
>>> d.setdefault(123,456)
456
>>> d
{123: 456}
>>> d.setdefault(123,123)
456
>>> d
{123: 456}
>>>

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

10. update

方法update使用一个字典中的项来更新另一个字典。

>>> d
{123: 456}
>>> e={123:789,1:34,2:23}
>>> d.update(e)
>>> d
{123: 789, 1: 34, 2: 23}
>>>

对于通过参数提供的字典,将其项添加到当前字典。如果当前字典包含键相同的项,就替换它

10. value

方法values返回一个由字典中的值组成的字典视图。不同于方法keys,方法values返回的视图可能有重复的值

>>> d
{123: 789, 1: 34, 2: 23, 32: 34}
>>> d.values()
dict_values([789, 34, 23, 34])

你可能感兴趣的:(python基础教程(第三版),python)