字典dict,是Python唯一的标准mapping类型,也是内置在Python解释器中的。

mapping object把一个可哈希的值(hashable value)映射到一个任意的object上。

什么是可哈希的

一个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,关于这个我以后会专门解释,或参见文末参考第3篇。

dict本身是一个类

class dict(mapping)

1,字典的创建

>>> d = dict({1:'a', 2:'b', 3:'c'})      #通过dict类来构建
>>> d
{1: 'a', 2: 'b', 3: 'c'}
>>> d2 = {1:'a', 2:'b', 3:'c'} #直接构建,注意语法,大括号,冒号,逗号
>>> d2
{1: 'a', 2: 'b', 3: 'c'}

2,dictionary支持的操作

作为Python唯一的标准mapping type,dictionary支持了增,删,查,整体更新等操作。

一部分操作是由dict的成员函数实现的,一部分操作是由Python的内置函数(built-in)function实现的,也有使用Python的del语句

2.1 引用元素

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

写一个module  ,mdict.py

 class myDict(dict):
def __missing__(self, key):
print "__missing__ called , key = ", key
4 return "^_^"

然后打开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
^_^

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

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

>>> a = d.get(1)
>>> a
'a'

2.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]

2.3 内置函数实现的操作

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

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

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

3, 字典的bool判断

Python的对象都可以直接用来判断其bool值,对内置的字典来说,当其为空时为False,不为空时True

>>> d = {}
>>> bool(d)
False

参考:

1,  http://docs.python.org/3/library/stdtypes.html#mapping-types-dict   Python 标准库

2,  http://docs.python.org/3/glossary.html#term-hashable   Python 术语

3,  http://wiki.python.org/moin/DictionaryKeys   为什么List不能做dictionary的key

Python字典 (dictionary)的更多相关文章

  1. Python 字典(Dictionary)操作详解

    Python 字典(Dictionary)的详细操作方法. Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字 ...

  2. Python 字典(Dictionary) get()方法

    描述 Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法: dict.get(key, default=None) 参数 ...

  3. Python 字典(Dictionary) setdefault()方法

    描述 Python 字典(Dictionary) setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值. 语法 setdefault()方法语法: ...

  4. Python 字典(Dictionary) has_key()方法

    描述 Python 字典(Dictionary) has_key() 函数用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false. 语法 has_key()方法语法:dic ...

  5. Python 字典(Dictionary) values()方法

    描述 Python 字典(Dictionary) values() 函数以列表返回字典中的所有值. 语法 values()方法语法: dict.values() 参数 NA. 返回值 返回字典中的所有 ...

  6. Python 字典(Dictionary) keys()方法

    Python 字典(Dictionary) keys() 函数以列表返回一个字典所有的键. 语法 keys()方法语法: dict.keys() 参数 NA. 返回值 返回一个字典所有的键. 实例 以 ...

  7. Python字典(Dictionary)update()方法

    原文连接:https://www.runoob.com/python/att-dictionary-update.html Python字典(dictionary)update()函数把字典dict2 ...

  8. Python 字典(Dictionary) items()方法

    描述 Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组.高佣联盟 www.cgewang.com 语法 items()方法语法: dict.it ...

  9. Python 字典(Dictionary) copy()方法

    描述 Python 字典(Dictionary) copy() 函数返回一个字典的浅复制.高佣联盟 www.cgewang.com 语法 copy()方法语法: dict.copy() 参数 NA. ...

  10. Python 字典(Dictionary) clear()方法

    Python 字典(Dictionary) clear()方法 描述 Python 字典(Dictionary) clear() 函数用于删除字典内所有元素.高佣联盟 www.cgewang.com ...

随机推荐

  1. 【JavaScript学习笔记】点击消失

    <!DOCTYPE html> <html> <head> <script type="text/javascript" src=&quo ...

  2. 【英语】Bingo口语笔记(75) - 元音辅音的辨读

  3. 聊聊Dataguard的三种保护模式实验(下)

    4.最大保护模式Maximum Protection 最大保护模式是DG可以提供的最高保护级别,建立在日志同步传输和确认的基础上.同样,可以使用alter database方法进行设置. SQL> ...

  4. 线程----BlockingQueue (转)

    t java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.ut ...

  5. perl环境配置以及Eclipse安装perl开发插件

    简介: 这篇文章将详细介绍 EPIC 组件的安装,EPIC 编辑环境,调试运行环境,着重介绍如何使用 EPIC 来快速.简便.准确地调试 Perl 语言程序,包括对于 Perl 程序的单步执行,断点用 ...

  6. html中的特殊符号

    html中的特殊符号 符号 说明 编码   符号 说明 编码   符号 说明 编码 " 双引号 " × 乘号 × ← 向左箭头 ← & AND符号 & ÷ 除号 ÷ ...

  7. 关于iOS APP中网络层的设计

    在iOS开发中,请求网络数据,处理获得的数据是很常见的功能,但是很少有资料会讨论关于网络的处理应该放在MVC中得哪个层中. 我在网上Google了一番,记下了几个觉得比较不错的链接.现记录如下: ht ...

  8. arcgis9.3 执行python文件

    1) 打开Python GUI 2) 选择菜单“File->Open”,打开你要执行的*.py文件 3) 选择菜单“Run->Run Module”,运行python文件 4)运行结果

  9. POJ 2241 Mondriaan's Dream

    题意:给一块n×m的空地,用1×2的砖铺,有多少种方案. 解法:状压dp.考虑dp[i][j]表示前i - 1行都铺满时第i行的状态为j时的方案数.对于第i行,每个格子上是否有砖用0和1表示,0表示不 ...

  10. WCF配置文件全攻略

    參考:http://www.cnblogs.com/wayfarer/archive/2007/08/24/867987.html http://www.cnblogs.com/scy251147/a ...