Python字典 (dictionary)
字典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)的更多相关文章
- Python 字典(Dictionary)操作详解
Python 字典(Dictionary)的详细操作方法. Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字 ...
- Python 字典(Dictionary) get()方法
描述 Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法: dict.get(key, default=None) 参数 ...
- Python 字典(Dictionary) setdefault()方法
描述 Python 字典(Dictionary) setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值. 语法 setdefault()方法语法: ...
- Python 字典(Dictionary) has_key()方法
描述 Python 字典(Dictionary) has_key() 函数用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false. 语法 has_key()方法语法:dic ...
- Python 字典(Dictionary) values()方法
描述 Python 字典(Dictionary) values() 函数以列表返回字典中的所有值. 语法 values()方法语法: dict.values() 参数 NA. 返回值 返回字典中的所有 ...
- Python 字典(Dictionary) keys()方法
Python 字典(Dictionary) keys() 函数以列表返回一个字典所有的键. 语法 keys()方法语法: dict.keys() 参数 NA. 返回值 返回一个字典所有的键. 实例 以 ...
- Python字典(Dictionary)update()方法
原文连接:https://www.runoob.com/python/att-dictionary-update.html Python字典(dictionary)update()函数把字典dict2 ...
- Python 字典(Dictionary) items()方法
描述 Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组.高佣联盟 www.cgewang.com 语法 items()方法语法: dict.it ...
- Python 字典(Dictionary) copy()方法
描述 Python 字典(Dictionary) copy() 函数返回一个字典的浅复制.高佣联盟 www.cgewang.com 语法 copy()方法语法: dict.copy() 参数 NA. ...
- Python 字典(Dictionary) clear()方法
Python 字典(Dictionary) clear()方法 描述 Python 字典(Dictionary) clear() 函数用于删除字典内所有元素.高佣联盟 www.cgewang.com ...
随机推荐
- codeforces 432 B Football Kit
题意:给出n支球队,主场的衣服的颜色x[i],客场的衣服的颜色y[i],每只队伍会打n-1次主场,n-1次客场,当这只队伍打客场的衣服颜色和对手一样的时候,那么他们要穿上主场的衣服 问每个球队主场球服 ...
- yum 一些命令
1)列出相关rpm包 yum list mysql* 2)使用指定源 yum --enablerepo=remi install [package] 3)卸载rpm包 yum remove mysql ...
- UVALive 3989 Ladies' Choice(稳定婚姻问题:稳定匹配、合作博弈)
题意:男女各n人,进行婚配,对于每个人来说,所有异性都存在优先次序,即最喜欢某人,其次喜欢某人...输出一个稳定婚配方案.所谓稳定,就是指未结婚的一对异性,彼此喜欢对方的程度都胜过自己的另一半,那么这 ...
- POJ 3565 Ants (最小权匹配)
题意 给出一些蚂蚁的点,给出一些树的点,两两对应,使他们的连线不相交,输出一种方案. 思路 一开始没想到怎么用最小权匹配--后来发现是因为最小权匹配的方案一定不相交(三角形两边之和大于第三边)--还是 ...
- UVa120 - Stacks of Flapjacks
Time limit: 3.000 seconds限时:3.000秒 Background背景 Stacks and Queues are often considered the bread and ...
- YouTrack Changing Database Location for EXE Distribution(windows service)
If you have installed YouTrack from EXE Distribution, then the best way to change the database locat ...
- 嵌入式 hi3518x平台h264+g711a封装mp4代码demo
先看代码吧,有代码有真相,具体代码的demo(下载demo的朋友请勿在网上上传我的demo,谢谢)下载连接为: http://download.csdn.net/detail/skdkjxy/8071 ...
- 使用 XML 实现 REST 式的 SOA
什么是 SOA? 如果公司有大量应用程序,这些程序供不同部门的承担不同责任的职员使用,那么就适合使用面向服务体系结构(Service Oriented Architecture,SOA).这些应用程序 ...
- 44、自定义仿IOS对话框
private Dialog myDialog = null; private void ExitLogin() { View view = LayoutInflater.from(MainActiv ...
- 【,net】发布网站问题
今天解决了一个发布后网站访问不了的问题: 问题: 发布网站:http://172.168.1.102:2222/nologin.html,但是页面一直处于刷新状态,进行不了系统: 解决方法: 问开发他 ...