python 字典详解(真的超级详细)

字典在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')])

你可能感兴趣的:(python,python,字典,dict,方法)