字典在python中的地位想必不用作者多说了,下面直接进入正题。
Python 2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)] on win32
>>> dir(dict)
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__',
'__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys',
'pop', 'popitem', 'setdefault', 'update', 'values','viewitems', 'viewkeys', 'viewvalues']
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
>>>dir(dict)
['__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']
在python2.7.8中查看dict属性是我们可以看到有一大堆的熟悉的和不熟悉的属性,下面我们针对每个属性进行分析和举例:
普通方法 | python2.7.8 | python3.7.2 | |
---|---|---|---|
clear() | yes | yes | 移除所有元素 |
copy() | yes | yes | 浅复制 点击示例 |
fromkeys(it[,init]) | yes | yes | 创建一个新字典,将迭代器it里面的元素设置为映射里面的键,若有init参数则将其设置为值。点击示例 |
get(k[,default]) | yes | yes | 获取键k对应的值,若没有返回None或default 点击示例 |
pop(k[,default]) | yes | yes | 返回键k对应的值,并移除该键值对,若无键k则返回None或default,类似于pop()方法 |
popitem() | yes | yes | 随机返回一个键值对,并从字典中移除它 |
setdefault(k, default) | yes | yes | 若字典里有键k,则返回键k对应的值,若字典里面没有键k,则令dict(k)=default,并返回default值。 点击示例 |
update(m, [*kargs]) | yes | yes | m可以是映射或者键值对迭代器,用来更新字典中对应的条目 |
items() | yes | yes | 返回字典的所有键值对 点击示例 |
keys() | yes | yes | 返回所有的键,类似于item()方法,python2.7和python3.7返回值不一样 |
values() | yes | yes | 返回字典中所有的值 |
iterkeys() | yes | no | 返回字典中键的迭代器 |
itervalues() | yes | no | 返回字典中值的迭代器 |
viewitems | yes | no | 返回类似集合的对象,显示字典中的元素,等同于python3.7中的items() |
viewkeys | yes | no | 返回类似集合的对象,显示字典中的键,等同于python3.7中的keys() |
viewvalues | yes | no | 返回类似集合的对象,显示字典中的值,等同于python3.7中的values() |
特殊方法 | python2.7.8 | python3.7.2 | |
---|---|---|---|
__class__ | yes | yes | 显示类型,等同于type(dict1) 点击跳转 |
__cmp__ | yes | no | cmp函数的字典方法实现 |
__contains__ | yes | yes | 用来判断字典中是否存在某个键,in 语法会调用 |
__getattribute__ | yes | yes | 获取属性的方法实现x.__getattribute__(‘name’) <==> x.name |
__delattr__ | yes | yes | x.__delattr__(‘name’) <==> del x.name |
__getitem__ | yes | yes | 取元素x.__getitem__(y) <==> x[y] |
__delitem__ | yes | yes | x.__delitem__(y) <==> del x[y] |
__doc__ | yes | yes | 字典初始化方法实现,dict(mapping),dict(iterable),dict(**kwargs) |
__format__ | yes | yes | format()格式化方法实现 |
__hash__ | yes | yes | 字典的hash表实现 |
__init__ | yes | yes | 初始化实例对象 |
__new__ | yes | yes | 创建实例对象 |
__init_subclass__ | yes | no | 被继承时使用 |
__iter__ | yes | yes | iter()实现,返回键的迭代器 |
__len__ | yes | yes | len()实现,获取字典的大小 |
__reduce__ | yes | yes | 序列化相关 |
__reduce_ex__ | yes | no | 序列化相关 |
__repr__ | yes | yes | repr()函数实现,字符串输出方法 |
__setattr__ | yes | yes | x.__setattr__(‘name’, value) <==> x.name = value,设置属性值 |
__setitem__ | yes | yes | x.__setitem__(i, y) <==> x[i]=y,设置元素值 |
__sizeof__ | yes | yes | 获取字典大小,指字节数 |
__str__ | yes | yes | 字符串格式化输出 |
__subclasshook__ | yes | yes | |
__eq__ | yes | yes | x.__eq__(y) <==> x==y |
__ge__ | yes | yes | x.__ge__(y) <==> x>=y |
__gt__ | yes | yes | x.__gt__(y) <==> x>y |
__le__ | yes | yes | x.__le__(y) <==> x<=y |
__lt__ | yes | yes | x.__lt__(y) <==> x |
__ne__ | yes | yes | x.__ne__(y) <==> x!=y |
dict.copy()方法示例
# 浅复制,只复制父对象,不复制对象内部的子对象
>>> dict1 = dict(a='ok', b=['yes', 'no'])
>>> dict2 = dict1.copy()
>>> dict1, dict2
({'a': 'ok', 'b': ['yes', 'no']}, {'a': 'ok', 'b': ['yes', 'no']})
>>> dict1['b'].append('oh')#dict1和dict2的中的'b'元素引用了相同的可变数据类型, 因此操作是同步的
>>> dict1['a'] = 'good' #'b'元素引用了不可变数据类型(元组例外,情况更为复杂),操作不同步
>>> dict1, dict2
({'a': 'good', 'b': ['yes', 'no', 'oh']}, {'a': 'ok', 'b': ['yes', 'no', 'oh']})
dict.fromkey()方法示例
>>> list1 = ['a', 'b', 'c']
>>> dict1 = dict().fromkeys(list1, 'vv')
>>> dict1 #使用该方法创造的字典是新字典
{'a': 1, 'c': 1, 'b': 1}
dict.get()方法示例
>>> dict1 = dict(a='ok', b='oh')
>>> value1 = dict1.get('a')
>>> value2 = dict2.get('c') #若字典中无此键,则返回默认值None
>>> value3 = dict3.get('c', 'NoExist') #若字典中无此键,则返回指定值
>>> value1, value2, value3
('ok', None, 'NoExist')
dict.setdefault()方法示例
>>> dict1 = dict(a='ok', b='good')
>>> dict2 = dict(dict1)
>>> dict1.setdefault('a', 'bad') #若该键存在就返回该键对应的值
'ok'
>>> dict2.setdefault('c', 'bad') #若该键不存在就将指定值赋值给该键,并返回指定值。若无指定值则默认为None
'bad'
dict1, dict2
({'a': 'ok', 'b': 'good'}, {'a': 'ok', 'c': 'bad', 'b': 'good'})
dict.items()方法示例
python2.7
>>> dict1 = dict(a='ok', b='good')
>>> dict1.items() #python2.7直接返回列表
[('a', 'ok'), ('b', 'good')]
python3.7
>>> dict2 = dict(a='ok', b='good')
>>> dict2.items() #python3.7返回一个dict_items类型实例
dict_items([('a', 'ok'), ('b', 'good')])