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.8python3.7.2
clear()yesyes移除所有元素
copy()yesyes浅复制 点击示例
fromkeys(it[,init])yesyes创建一个新字典,将迭代器it里面的元素设置为映射里面的键,若有init参数则将其设置为值。点击示例
get(k[,default])yesyes获取键k对应的值,若没有返回None或default 点击示例
pop(k[,default])yesyes返回键k对应的值,并移除该键值对,若无键k则返回None或default,类似于pop()方法
popitem()yesyes随机返回一个键值对,并从字典中移除它
setdefault(k, default)yesyes若字典里有键k,则返回键k对应的值,若字典里面没有键k,则令dict(k)=default,并返回default值。 点击示例
update(m, [*kargs])yesyesm可以是映射或者键值对迭代器,用来更新字典中对应的条目
items()yesyes返回字典的所有键值对 点击示例
keys()yesyes返回所有的键,类似于item()方法,python2.7和python3.7返回值不一样
values()yesyes返回字典中所有的值
iterkeys()yesno返回字典中键的迭代器
itervalues()yesno返回字典中值的迭代器
viewitemsyesno返回类似集合的对象,显示字典中的元素,等同于python3.7中的items()
viewkeysyesno返回类似集合的对象,显示字典中的键,等同于python3.7中的keys()
viewvaluesyesno返回类似集合的对象,显示字典中的值,等同于python3.7中的values()
特殊方法python2.7.8python3.7.2
__class__yesyes显示类型,等同于type(dict1) 点击跳转
__cmp__yesnocmp函数的字典方法实现
__contains__yesyes用来判断字典中是否存在某个键,in 语法会调用
__getattribute__yesyes获取属性的方法实现x.__getattribute__(‘name’) <==> x.name
__delattr__yesyesx.__delattr__(‘name’) <==> del x.name
__getitem__yesyes取元素x.__getitem__(y) <==> x[y]
__delitem__yesyesx.__delitem__(y) <==> del x[y]
__doc__yesyes字典初始化方法实现,dict(mapping),dict(iterable),dict(**kwargs)
__format__yesyesformat()格式化方法实现
__hash__yesyes字典的hash表实现
__init__yesyes初始化实例对象
__new__yesyes创建实例对象
__init_subclass__yesno被继承时使用
__iter__yesyesiter()实现,返回键的迭代器
__len__yesyeslen()实现,获取字典的大小
__reduce__yesyes序列化相关
__reduce_ex__yesno序列化相关
__repr__yesyesrepr()函数实现,字符串输出方法
__setattr__yesyesx.__setattr__(‘name’, value) <==> x.name = value,设置属性值
__setitem__yesyesx.__setitem__(i, y) <==> x[i]=y,设置元素值
__sizeof__yesyes获取字典大小,指字节数
__str__yesyes字符串格式化输出
__subclasshook__yesyes
__eq__yesyesx.__eq__(y) <==> x==y
__ge__yesyesx.__ge__(y) <==> x>=y
__gt__yesyesx.__gt__(y) <==> x>y
__le__yesyesx.__le__(y) <==> x<=y
__lt__yesyesx.__lt__(y) <==> x<y
__ne__yesyesx.__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')])
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值