Python学习笔记之映射类型字典(dict)
2014-01-05 12:16
645 查看
一个字典对象是可变的,是一个容器类型,能存储任意个数的Python对象,其中也包括其他容器类型
字典类型和序列类型容器类(列表,元组)的区别是存储和访问数据的方式不同
字典本身是哈希的,所以是无序的
所能获得的有序集合只能是字典中的键的集合或者值的集合,方法keys()或values()返回一个列表,该列表是可排序的。也可以使用方法items()得到包含键、值对的元组的列表来进行排序。
创建字典
工厂方法dict()
>>> fdict =dict((['x', 1], ['y', 2])) #使用元组,其中每个元素为列表
>>>fdict
{'y': 2, 'x': 1}
>>> fdict =dict([('x', 1), ('y', 2)]) #使用列表,其中每个元素为元组
>>> fdict
{'y': 2, 'x': 1}
使用内建方法fromkeys()创建一个“默认”字典,字典中元素具有相同的值(默认为None)
>>> fdict ={}.fromkeys(('x', 'y'), 1)
>>> fdict
{'y': 1, 'x': 1}
>>> fdict =dict.fromkeys(('x', 'y'), 1) #dict为字典关键字
>>> fdict
{'y': 1, 'x': 1}
如何访问字典中的值
要想遍历一个字典,只需循环查看它的键
>>> for key in fdict.keys():
print 'key=%s, value=%s' %(key,fdict[key])
也可以不再使用keys()
>>>for key in fdict:
print 'key=%s,value=%s' %(key, fdict[key])
访问字典中的一个数据元素,它的键在字典中不存在时,会产生KeyError异常。
检查字典中是否有某个键,方法has_key(), in或not in操作符。(*has_key()已弃用)
更新字典
>>>fdict['x'] = 10
删除字典元素和字典
>>>del fdict['x'] #删除键为’x'的条目
>>>fdict.clear() #删除fdict所有的条目,fdict清空
>>>del fdict #删除整个fdict字典
>>>fdict.pop('x') #删除并返回键为‘x'的条目
字典操作类型操作符
*避免使用内建对象名字作为变量的标识符(如:dict, list,file, bool, str, input, len)
*字典可以和所有的标准类型操作符一起工作,但不支持拼接(concatenation)和重复(repetition),这些操作对序列才有意义。
>>> t = fdict + fdict2 #TypeError
Traceback (most recent call last):
File "<pyshell#57>", line 1, in <module>
t = fdict + fdict2
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
标准类型函数
cmp()
字典通过这样的算法来比较的:比较字典的长度->比较字典的键->比较字典的值->Exact
Match,字典相等
映射类型的相关函数
dict([container])
*工厂函数被用来创建字典,如不提供参数,会生成空字典
*当容器类型对象作为一个参数传递给方法dict()时,参数必须是可迭代的,如一个序列,或一个迭代器,或一个支持迭代的对象,每个迭代的元素必须成对出现,在每个值对中,第一个元素是字典的键,第二个元素是字典的值。
>>>dict(zip(('x', 'y'), (1,2)))
{'y': 2, 'x': 1}
>>>dict((('x', 1), ('y',2)))
{'y': 2, 'x': 1}
>>>dict([['x', 1], ['y',2]])
{'y': 2, 'x': 1}
>>>dict([('xyz'[i], i) for i in range(0,3)])
{'y': 1, 'x': 0,'z': 2}
>>>dict(x=1,y=2) #关键字参数
{'y': 2, 'x': 1}
>>>dict(dict2) #字典参数,使用字典的内建方法copy会更快。
len(mapping),字典长度
hash(obj)
返回对象的哈希值,可判断某个对象是否可以作为一个字典的键(hash()返回值整数,无错误或异常)。
将非可哈希类型作为参数传递给hash()方法,会产生TypeError错误,作为键给字典赋值时同样会出错。
字典类型相关方法
clear()
copy(), 返回字典(浅复制)的一个副本
fromkeys(seq, val=None),创建并返回一个新字典,以seq中的元素作为该字典的键,val作为该字典中所有键对应的初始值。
get(key, default=None),返回字典中键key对应的值,如不存在此键,这返回default,操作符[]如键不存在,会引发异常
has_key(key),已弃用,使用in,not in操作符代替
items(),返回一个包含字典中(键,值)对元组的列表
keys(),返回一个包含字典中键的列表
value(),返回一个字典中所有值的列表
iter(),方法iteritems(), iterkeys(), itervalues()与他们对应的非迭代方法一样,不同的是他们返回一个迭代子,而不是列表。
pop(key, [,default]),和get()类类似,如key键存在,删除并返回dict[key],如key键不存在,返回default,无没有给出default,引发KeyError异常。
update(dict2),将字典dict2的键-值对添加到字典dict,字典不支持连接+
setdefault(key, defaukt=None),检查字典中是否含有键key,如字典中不存在key键,由dict[key]=default为它赋值,如key键存在,则返回其值。
iteritems(),iterkeys(), itervalues()
其对应方法items(), keys(), values()的返回值都是列表,如数据集很大会导致很难处理。
iter()返回惰性赋值的迭代器,所以节省内存,将来这些方法会返回强大的对象。
*所有不可变的类型都是可哈希的,所以都可以作为字典的键
*对于数字,值相等的数字表示相同的键,比如整数1和浮点数1.0哈希值相同,是相同的键
*也有一些可变对象是可哈希的,可以做字典的键,比如实现__hash__()特殊方法的类。
*用元组做有效的键,元组中必须只包括数字,字符串等不可变参数
字典类型和序列类型容器类(列表,元组)的区别是存储和访问数据的方式不同
字典本身是哈希的,所以是无序的
所能获得的有序集合只能是字典中的键的集合或者值的集合,方法keys()或values()返回一个列表,该列表是可排序的。也可以使用方法items()得到包含键、值对的元组的列表来进行排序。
创建字典
工厂方法dict()
>>> fdict =dict((['x', 1], ['y', 2])) #使用元组,其中每个元素为列表
>>>fdict
{'y': 2, 'x': 1}
>>> fdict =dict([('x', 1), ('y', 2)]) #使用列表,其中每个元素为元组
>>> fdict
{'y': 2, 'x': 1}
使用内建方法fromkeys()创建一个“默认”字典,字典中元素具有相同的值(默认为None)
>>> fdict ={}.fromkeys(('x', 'y'), 1)
>>> fdict
{'y': 1, 'x': 1}
>>> fdict =dict.fromkeys(('x', 'y'), 1) #dict为字典关键字
>>> fdict
{'y': 1, 'x': 1}
如何访问字典中的值
要想遍历一个字典,只需循环查看它的键
>>> for key in fdict.keys():
print 'key=%s, value=%s' %(key,fdict[key])
也可以不再使用keys()
>>>for key in fdict:
print 'key=%s,value=%s' %(key, fdict[key])
访问字典中的一个数据元素,它的键在字典中不存在时,会产生KeyError异常。
检查字典中是否有某个键,方法has_key(), in或not in操作符。(*has_key()已弃用)
更新字典
>>>fdict['x'] = 10
删除字典元素和字典
>>>del fdict['x'] #删除键为’x'的条目
>>>fdict.clear() #删除fdict所有的条目,fdict清空
>>>del fdict #删除整个fdict字典
>>>fdict.pop('x') #删除并返回键为‘x'的条目
字典操作类型操作符
*避免使用内建对象名字作为变量的标识符(如:dict, list,file, bool, str, input, len)
*字典可以和所有的标准类型操作符一起工作,但不支持拼接(concatenation)和重复(repetition),这些操作对序列才有意义。
>>> t = fdict + fdict2 #TypeError
Traceback (most recent call last):
File "<pyshell#57>", line 1, in <module>
t = fdict + fdict2
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
标准类型函数
type() >>>type(fdict) <type 'dict'> >>>type(dict) <type'type'> str() >>>str(fdict) "{'y': 1, 'x': 1}" >>> fdict {'y': 1, 'x': 1}
cmp()
字典通过这样的算法来比较的:比较字典的长度->比较字典的键->比较字典的值->Exact
Match,字典相等
映射类型的相关函数
dict([container])
*工厂函数被用来创建字典,如不提供参数,会生成空字典
*当容器类型对象作为一个参数传递给方法dict()时,参数必须是可迭代的,如一个序列,或一个迭代器,或一个支持迭代的对象,每个迭代的元素必须成对出现,在每个值对中,第一个元素是字典的键,第二个元素是字典的值。
>>>dict(zip(('x', 'y'), (1,2)))
{'y': 2, 'x': 1}
>>>dict((('x', 1), ('y',2)))
{'y': 2, 'x': 1}
>>>dict([['x', 1], ['y',2]])
{'y': 2, 'x': 1}
>>>dict([('xyz'[i], i) for i in range(0,3)])
{'y': 1, 'x': 0,'z': 2}
>>>dict(x=1,y=2) #关键字参数
{'y': 2, 'x': 1}
>>>dict(dict2) #字典参数,使用字典的内建方法copy会更快。
len(mapping),字典长度
hash(obj)
返回对象的哈希值,可判断某个对象是否可以作为一个字典的键(hash()返回值整数,无错误或异常)。
将非可哈希类型作为参数传递给hash()方法,会产生TypeError错误,作为键给字典赋值时同样会出错。
字典类型相关方法
clear()
copy(), 返回字典(浅复制)的一个副本
fromkeys(seq, val=None),创建并返回一个新字典,以seq中的元素作为该字典的键,val作为该字典中所有键对应的初始值。
get(key, default=None),返回字典中键key对应的值,如不存在此键,这返回default,操作符[]如键不存在,会引发异常
has_key(key),已弃用,使用in,not in操作符代替
items(),返回一个包含字典中(键,值)对元组的列表
keys(),返回一个包含字典中键的列表
value(),返回一个字典中所有值的列表
iter(),方法iteritems(), iterkeys(), itervalues()与他们对应的非迭代方法一样,不同的是他们返回一个迭代子,而不是列表。
pop(key, [,default]),和get()类类似,如key键存在,删除并返回dict[key],如key键不存在,返回default,无没有给出default,引发KeyError异常。
update(dict2),将字典dict2的键-值对添加到字典dict,字典不支持连接+
setdefault(key, defaukt=None),检查字典中是否含有键key,如字典中不存在key键,由dict[key]=default为它赋值,如key键存在,则返回其值。
setdefault(key,default=None) >>> fdict =dict(x=1,y=2) >>> fdict {'y': 2, 'x': 1} >>> fdict.setdefault('x',100) 1 >>> fdict {'y': 2, 'x': 1} >>>fdict.setdefault('z', 100) 100 >>> fdict {'y': 2, 'x': 1,'z': 100}
iteritems(),iterkeys(), itervalues()
其对应方法items(), keys(), values()的返回值都是列表,如数据集很大会导致很难处理。
iter()返回惰性赋值的迭代器,所以节省内存,将来这些方法会返回强大的对象。
*所有不可变的类型都是可哈希的,所以都可以作为字典的键
*对于数字,值相等的数字表示相同的键,比如整数1和浮点数1.0哈希值相同,是相同的键
*也有一些可变对象是可哈希的,可以做字典的键,比如实现__hash__()特殊方法的类。
*用元组做有效的键,元组中必须只包括数字,字符串等不可变参数
相关文章推荐
- python的list,dict,tuple比较和应用
- python 3 安装笔记
- python基础笔记
- Why so many Python web frameworks
- Python模块导入和执行
- Python模块概念和基本使用
- Python模块包和搜索路径
- python vimrc
- Python 的 Magic Methods 指南
- python---解决“Unable to find vcvarsall.bat”错误
- Python使用基础
- win7(64bit)python相关环境模块搭建
- python笔记-Twisted 实现简单的服务器客户端程序
- python 字符串格式化
- Convert SVG to PNG in Python - Stack Overflow
- 解决初次安装PyCharm后 No Python interpreter selected的问题
- python中分割字符串
- Python学习(三)——————基础知识汇总(三)
- python's descriptor II
- qrcode 4.0.4 : Python Package Index