Python字典

字典的方法

>>> for i in dir(dict):print(i)

clear 清空字典

copy 浅拷贝

fromkeys创建一个新字典,并初始化

get 返回键对应的值,可以设置没有指定键时的默认值

items以迭代器返回可遍历的(键, 值) 元组数组

keys以迭代器返回字典的键

pop删除字典中指定的键和对应的值

popitem删除字典最后的键值对

setdefault查找键的值,如果键不存在添加键并设置默认值

update把字典参数 dict2  key/value(/) 对更新到字典 dict

values 以迭代器返回字典的值

 

clear 清空字典

>>> help(dict.clear)

Help on method_descriptor:

 

clear(...)

D.clear() -> None. Remove all items from D.

 

示例:

>>> D = {'name':'hh','age':18}

>>> D

{'name': 'hh', 'age': 18}

>>> D.clear()

>>> D

{}

copy 浅拷贝

>>> help(dict.copy)

Help on method_descriptor:

 

copy(...)

D.copy() -> a shallow copy of D

 

示例:

 

1dict.copy()浅拷贝

拷贝父对象,不会拷贝父对象内部的子对象。即两个对象的子对象指向同一个引用

>>> D = {'k1':['a','b'],'k2':{'k21':'x'}}

>>> D1 = D.copy()

>>> D

{'k1': ['a', 'b'], 'k2': {'k21': 'x'}}

>>> D1

{'k1': ['a', 'b'], 'k2': {'k21': 'x'}}

 

#下面可以看出,子对象指向同一个引用,原位置修改任意对象的子对象,两个对象的子对象都会修改,但赋值新的引用不会影响另外一个

>> id(D)

50215024

>>> id(D1)

49690304

 

>>> id(D['k1'])

50105672

>>> id(D1['k1'])

50105672

 

 

>>> D['k1'][0]=1 #修改父对象的子对象,原位置修改

>>> D

{'k1': [1, 'b'], 'k2': {'k21': 'x'}}

>>> D1

{'k1': [1, 'b'], 'k2': {'k21': 'x'}}

 

>>> D1['k2']['k21']='y' #修改子对象的子对象,原位置修改

>>> D

{'k1': [1, 'b'], 'k2': {'k21': 'y'}}

>>> D1

{'k1': [1, 'b'], 'k2': {'k21': 'y'}}

 

>>> D['k1']=1 #修改父对象的子对象,重新引用

>>> D

{'k1': 1, 'k2': {'k21': 'y'}}

>>> D1

{'k1': [1, 'b'], 'k2': {'k21': 'y'}}

 

2、copy.deepcopy()深拷贝

深拷贝是对原有对象的完全拷贝,同时拷贝父对象和子对象

 

>>> import copy

>>> D = {'k1':['a','b'],'k2':{'k21':'x'}}

>>> D1 = copy.deepcopy(D)

>>> D

{'k1': ['a', 'b'], 'k2': {'k21': 'x'}}

>>> D1

{'k1': ['a', 'b'], 'k2': {'k21': 'x'}}

 

#下面可以看出,深拷贝后,两个对象完全不相干

>>> id(D)

50214808

>>> id(D1)

50214736

>>> id(D['k1'])

50076872

>>> id(D1['k1'])

49835016

 

#完全不相干,原位置修改子对象不会影响另外一个

>>> D['k1'][0]=1

>>> D

{'k1': [1, 'b'], 'k2': {'k21': 'x'}}

>>> D1

{'k1': ['a', 'b'], 'k2': {'k21': 'x'}}

 

3、等号赋值

完全是同一个引用

 

>>> D = {'k1':['a','b'],'k2':{'k21':'x'}}

>>> D1=D

>>> id(D)

49690304

>>> id(D1)

49690304

fromkeys 创建一个新字典,并初始化    

创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。

 

>>> help(dict.fromkeys)

Help on built-in function fromkeys:

 

fromkeys(iterable, value=None, /) method of builtins.type instance

Returns a new dict with keys from iterable and values equal to value.

 

示例:

>>> D = dict.fromkeys(['k1','k2','k3'])

>>> D

{'k1': None, 'k2': None, 'k3': None}

 

>>> D = dict.fromkeys(['k1','k2','k3'],'v')

>>> D

{'k1': 'v', 'k2': 'v', 'k3': 'v'}

 

>>> D = dict.fromkeys(['k1','k2','k3'],[1,2,3])

>>> D

{'k1': [1, 2, 3], 'k2': [1, 2, 3], 'k3': [1, 2, 3]}

get 返回键对应的值,可以设置没有指定键时的默认值

没有指定的键返回None,可以设置没有指定的键时的返回值,默认为None

>>> help(dict.get)

    

Help on method_descriptor:

 

get(...)

D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.

 

>>> d = {'bob':11,'mary':12}

>>> d.get('bob')

11

>>> d.get('shery')

>>> bool(d.get('shery'))

False

>>> d.get('shery','100')

'100'

 

items 以迭代器返回可遍历的(键, 值) 元组数组

>>> help(dict.items)

Help on method_descriptor:

 

items(...)

D.items() -> a set-like object providing a view on D's items

 

示例:

>>> D = {'k1':'v1','k2':'v2'}

>>> D.items()

dict_items([('k1', 'v1'), ('k2', 'v2')])

>>> for i in D.items():print(i)

 

('k1', 'v1')

('k2', 'v2')

keys以迭代器返回字典的键

>>> help(dict.keys)

Help on method_descriptor:

 

keys(...)

D.keys() -> a set-like object providing a view on D's keys

 

示例:

>>> D = {'k1':'v1','k2':'v2'}

>>> D.keys()

dict_keys(['k1', 'k2'])

 

>>> for i in D.keys():print(i)

 

k1

k2

pop 删除字典中指定的键和对应的值

 

删除字典给定键 key 所对应的值,返回值为被删除的值。

没有找到key值返回default值,如果没有指定default,报错。

>>> help(dict.pop)

Help on method_descriptor:

 

pop(...)

D.pop(k[,d]) -> v, remove specified key and return the corresponding value.

If key is not found, d is returned if given, otherwise KeyError is raised

 

示例

>>> D={'k1':1,'k2':[1,2]}

>>> D.pop('k1')

1

>>> D

{'k2': [1, 2]}

>>> D.pop('k3')

Traceback (most recent call last):

File "<pyshell#117>", line 1, in <module>

D.pop('k3')

KeyError: 'k3'

>>> D.pop('k3','noexist')

'noexist'

popitem 删除字典最后的键值对

如果字典为空会报错

>>> help(dict.popitem)

Help on method_descriptor:

 

popitem(...)

D.popitem() -> (k, v), remove and return some (key, value) pair as a

2-tuple; but raise KeyError if D is empty.

 

>>> D={'k1':1,'k2':[1,2]}

>>> D.popitem()

('k2', [1, 2])

>>> D.popitem()

('k1', 1)

>>>

>>>

>>> D.popitem()

Traceback (most recent call last):

File "<pyshell#134>", line 1, in <module>

D.popitem()

KeyError: 'popitem(): dictionary is empty'

setdefault 查找键的值,如果键不存在添加键并设置默认值

>>> help(dict.setdefault)

Help on method_descriptor:

 

setdefault(...)

D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D

 

示例

>>> D={'k1':1,'k2':[1,2]}

>>> D.setdefault('k1')

1

>>> D.setdefault('k2')

[1, 2]

>>> D.setdefault('k3')

>>> D

{'k1': 1, 'k2': [1, 2], 'k3': None}

>>> D.setdefault('k4','x')

'x'

>>> D

{'k1': 1, 'k2': [1, 2], 'k3': None, 'k4': 'x'}

update把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里

如果有重复的键,值会覆盖掉原来的

>>> help(dict.update)

Help on method_descriptor:

 

update(...)

D.update([E, ]**F) -> None. Update D from dict/iterable E and F.

If E is present and has a .keys() method, then does: for k in E: D[k] = E[k]

If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v

In either case, this is followed by: for k in F: D[k] = F[k]

 

示例:

>>> D={'k1':1,'k2':[1,2]}

>>> D1 = {'k3':'x'}

>>> D.update(D1)

>>> D

{'k1': 1, 'k2': [1, 2], 'k3': 'x'}

>>> D2 = {'k3':'y'}

>>> D.update(D2)

>>> D

{'k1': 1, 'k2': [1, 2], 'k3': 'y'}

values以迭代器返回字典的值

>>> help(dict.values)

Help on method_descriptor:

 

values(...)

D.values() -> an object providing a view on D's values

 

示例:

>>> D = {'k1':'v1','k2':'v2'}

>>> D.values()

dict_values(['v1', 'v2'])

>>> for i in D.values():print(i)

 

v1

v2

posted @ 2020-09-30 00:14  jeancheng  阅读(181)  评论(0编辑  收藏  举报