python dict用法_Python中Dict类型的操作介绍

前面字典 dict 实现 switch 这样的功能,但是没有深入介绍 dict 这个数据类型,这里开始补充下。

字典 dict,是 Python 唯一的标准 mapping 类型,也是内置在 Python 解释器中的。mapping object 把一个可哈希的值(hashable value)映射到一个任意的 object 上。

什么是可哈希(hashable)的?一个 object 是可哈希的(hashable),是指这个 object 在其生存期内有一个不变的哈希值(hash value),即__hash__() 方法返回的值。

所有不可变的(immutable)内置 object 都是 hashable 的,比如 string,tuple。所有可变的(mutable)内置容器都不是 hashable 的,比如 list,dict(即没有 __hash__() 方法)。而所有自定义的类(use-defined class)对象都是可哈希的(hashable),并且只能和自己相等,其 hashvalue 为其 id(object) 的值,这里的 id() 为内置函数,CPython 实现的时候取的对象在内存中的地址。

字典 Dictionary 的 key 必须是可哈希的,所以 tuple(元组),string 可以做 key,而 list 不能做 key,关于后面会解释。

字典的创建

dict 本身是一个类,可以通过 dict 类来构建字典:

>>> d = dict({1:'a', 2:'b', 3:'c'})

>>> d

{1: 'a', 2: 'b', 3: 'c'}

>>> d2 = {1:'a', 2:'b', 3:'c'}

>>> d2

{1: 'a', 2: 'b', 3: 'c'}

>>>

那么字典这个数据类型有什么好处呢?它提供了很多方便的操作:

dictionary支持的操作

1. 引用元素

直接用d[key],就可以得到key所对应得那个object:

>>> d2 = {1:'a', 2:'b', 3:'c'}

>>> d2

{1: 'a', 2: 'b', 3: 'c'}

>>> d2[1]

'a'

但是如果key不存在呢,如果使用的就是标准的dict,那么会抛出KeyError异常。但是如果我们是自己从dict派生了一个自己的dictionary,那么只要我们定义__missing__函数,当key不存在时,这个函数会以key做为参数被调用,我们试验一下。

写一个module,mdict.py:

class myDict(dict):

def __missing__(self, key):

print "__missing__ called , key = ", key

return "nowamagic.net"

然后打开Python命令行解释器,import mdict

>>> from mdict import myDict

>>> d = myDict({1:'a', 2:'b', 3:'c'})

>>> d

{1: 'a', 2: 'b', 3: 'c'}

>>> d[1]

'a'

>>> d[4]

__missing__ called , key = 4

nowamagic.net

可以看到__missing__()被调用了。

如果只想得到某个key对应的value,不想对其进行改变,则用类方法get() ,这类似C++中“引用”和“值”的概念。

>>> a = d.get(1)

>>> a

'a'

2. 类方法实现的操作

>>>d.clear()# 清空

>>>d.copy() # 拷贝生成另一个,浅拷贝(shallow copy)

d.keys(),d.values(),d.items() 这三个都会生成dictionary相应的keys,values,items的copy,返回结果都是list,d.items()生成的是(key,value)二元tuple的list。

>>> d.items()

[(1, 'a'), (2, 'b'), (3, 'c')]

>>> d.keys()

[1, 2, 3]

>>> d.values()

['a', 'b', 'c']

d.viewkeys(),d.viewvalues(),d.viewitems()

这三个都会生成dictionary相应的view object,view object是dictionary中(key,value)的动态反映,当dictionary中的内容变化时,view object也会变。

>>> viewkeys = d.viewkeys()

>>> viewkeys

dict_keys([1, 2, 3])

>>> list(viewkeys)

[1, 2, 3]

>>> del d[1]

>>> list(viewkeys)

[2, 3]

3. 内置函数实现的操作

>>>len(d) #dictionary的长度

>>>del d[key] 或 del d #del语句

>>>key in d 或 key not in d #返回True or False

因为操作的便利,Dict 类型在 Python 应用很广泛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值