2020年5月8日 / 67次阅读 / Last Modified 2021年1月7日
Dict
这篇文章给自己总结一下dict对象的成员函数,配合示例代码。
>>> d
{'a': 1, 'c': 3, 'e': 5, 'b': 2, 'd': 4}
>>> dir(d)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
清空整个dict对象,即清除所有数据项。
>>> help(d2.clear)
Help on built-in function clear:
clear(...) method of builtins.dict instance
D.clear() -> None. Remove all items from D.
>>> d2
{'a': 1, 'c': 3, 'e': 5, 'b': 2, 'd': 4}
>>> d2.clear()
>>> d2
{}
浅拷贝。(关于深copy)
>>> dd = {'a':[1,2,3],'b':[4,5,6]}
>>> dd
{'a': [1, 2, 3], 'b': [4, 5, 6]}
>>> dd2 = dd.copy()
>>> dd2['a'][0] = 999
>>> dd
{'a': [999, 2, 3], 'b': [4, 5, 6]}
这应该是一个classmethod方法,用来通过一个iterable对象创建dict对象:
>>> keys
[1, 2, 3, 4, 5, 6, 7, 8]
>>> dict.fromkeys(keys)
{1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None}
>>> dict.fromkeys(keys, '123')
{1: '123', 2: '123', 3: '123', 4: '123', 5: '123', 6: '123', 7: '123', 8: '123'}
通过key值获取value,如果key值不存在,默认返回None,也可以指定一个不存在时的默认返回值:
>>> d
{'a': 1, 'c': 3, 'e': 5, 'b': 2, 'd': 4}
>>> d.get('a')
1
>>> d.get('d')
4
>>> d.get('f')
>>> d.get('f', 999)
999
如果不使用get函数,而是直接引用一个不存在的key值,可能会出现KeyError:
>>> d['f']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'f'
此函数返回一个set-like对象,这种set-like对象,可能在某些集合(set)运算的时候会比较方便。而我们一般使用此函数来方便的遍历dict对象的数据,下面给出几种遍历方式对比:
>>> d
{'a': 1, 'c': 3, 'e': 5, 'b': 2, 'd': 4}
>>> for it in d:
... print(it)
...
a
c
e
b
d
>>> for it in d:
... print(it, d[it])
...
a 1
c 3
e 5
b 2
d 4
>>> for k,v in d.items():
... print(k,v)
...
a 1
c 3
e 5
b 2
d 4
返回一个set-like对象,仅包含key值:
>>> d
{'a': 1, 'c': 3, 'e': 5, 'b': 2, 'd': 4}
>>> d.keys()
dict_keys(['a', 'c', 'e', 'b', 'd'])
>>> list(d)
['a', 'c', 'e', 'b', 'd']
>>> tuple(d)
('a', 'c', 'e', 'b', 'd')
>>> set(d)
{'c', 'b', 'a', 'd', 'e'}
返回key指定的item的value,并删除此item,可以指定key不存在时返回的默认值,如果不指定,key不存在时会抛出KeyError异常:
>>> d
{'a': 1, 'c': 3, 'e': 5, 'b': 2, 'd': 4}
>>>
>>>
>>> d
{'a': 1, 'c': 3, 'e': 5, 'b': 2, 'd': 4}
>>> d.pop('a')
1
>>> d
{'c': 3, 'e': 5, 'b': 2, 'd': 4}
>>> d.pop('a', 99)
99
>>> d
{'c': 3, 'e': 5, 'b': 2, 'd': 4}
>>> d.pop('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'a'
按照插入相反的顺序弹出item,即key:value pair,并删除时item,如果dict为空,会有KeyError异常抛出:
>>> d = {}
>>> d['a'] = 1
>>> d['c'] = 3
>>> d['e'] = 5
>>> d['b'] = 2
>>> d['d'] = 4
>>> d
{'a': 1, 'c': 3, 'e': 5, 'b': 2, 'd': 4}
>>> d.popitem()
('d', 4)
>>> d.popitem()
('b', 2)
>>> d.popitem()
('e', 5)
>>> d.popitem()
('c', 3)
>>> d.popitem()
('a', 1)
>>> d.popitem()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'popitem(): dictionary is empty'
可以使用popitem函数来遍历dict对象中的数据。
此函数用来向dict对象中插入数据,如果key不存在,value就由函数default参数指定,并返回default,如果key存在,原key对应的value不变,返回原key值对应的value:
>>> help(d.setdefault)
Help on built-in function setdefault:
setdefault(key, default=None, /) method of builtins.dict instance
Insert key with a value of default if key is not in the dictionary.
Return the value for key if key is in the dictionary, else default.
>>>
>>> d
{}
>>> d.setdefault('a',1)
1
>>> d.setdefault('a',2)
1
>>> d
{'a': 1}
这个函数的解释看着有些复杂,它的功能就是update key对应的value,不过不是一个个的更新,而是一批批的更新:
>>> help(d.update)
Help on built-in function update:
update(...) method of builtins.dict instance
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]
>>>
>>>
>>> a = {'a':1, 'b':2, 'c':3}
>>> b = {'a':'1', 'b':'2'}
>>> a.update(b)
>>> a
{'a': '1', 'b': '2', 'c': 3}
>>>
>>> a.update(a=11, c=33)
>>> a
{'a': 11, 'b': '2', 'c': 33}
仔细阅读update函数的说明,不限于已经存在的key值。
此函数与keys,items对应,都是提供了一个view,用来查看所有的value:
>>> d
{'a': 1, 'c': 3, 'e': 5, 'b': 2, 'd': 4}
>>>
>>> for v in d.values():
... print(v)
...
1
3
5
2
4
以上就是所有dict对象的成员函数总结。(list对象成员函数总结)
-- EOF --
本文链接:https://www.pynote.net/archives/1884
《dict对象的成员函数》有3条留言
前一篇:dict对象的创建和使用
后一篇:set对象的创建和使用
Ctrl+D 收藏本页
©Copyright 麦新杰 Since 2019 Python笔记
dict.pop指定默认值,默默删除对应的key-value pair,不管key是否存在,太好用了! [ ]
when keys in dict are int, update method is restricted. [ ]
要把代码写成适合更多特殊情况的流程,就像数据公式一样,数学家讨厌特殊情况。pop和setdefault函数,就是这种思想的体现。 [ ]