1.创建和使用字典
代码示例:
#通过关键字创建>>> a={'name':'cai'}#通过函数dict创建>>> a={'name':'cai'}>>> a=['name','cai','age',12]>>> b=dict(a)Traceback (most recent call last): File "", line 1, in b=dict(a)ValueError: dictionary update sequence element #0 has length 4; 2 is required>>> a=[('name','cai'),('age',12)]>>> b=dict(a)>>> b{'age': 12, 'name': 'cai'}>>>
#创建一个字典>>> x={}>>> x[40]='abc'>>> x{40: 'abc'}>>> x['key']=12>>> x{40: 'abc', 'key': 12}>>>
2.基本的字典操作
- 字典的特点:键是唯一的、不可更改的,所以键可以是字符串、元组、数字,但不能是列表;值并不是唯一的,它的元素不受限制。
- len(d)返回d中项的数量。
- d[k]返回关联到键k上的值。
- d[k]=v将值v关联到键k上。
- del d[k]删除键为k的项。
- 成员资格 k in d 查找的是键,而不是值。
- 自动添加
字典copy和deepcopy
#不可更改的>>> import copy>>> a={'name':'cai','age':25}>>> a1=a.copy()>>> a2=copy.deepcopy(a)>>> a['name']='ren'>>> a['age']='24'>>> a{'age': '24', 'name': 'ren'}>>> a1{'age': 25, 'name': 'cai'}>>> a2{'age': 25, 'name': 'cai'}>>> #可更改的>>> import copy>>> a={'name':'cai','number':[1,2,3]}>>> a1=a.copy()>>> a2=copy.deepcopy(a)>>> a['name']='ren'>>> a['number'].remove(1)>>> a{'name': 'ren', 'number': [2, 3]}>>> a1{'name': 'cai', 'number': [2, 3]}>>> a2{'name': 'cai', 'number': [1, 2, 3]}>>>
3.字典格式化字符串
>>> a={'name':'cai','age':12}>>> print 'please gave you %(name)'%caiTraceback (most recent call last): File "", line 1, in print 'please gave you %(name)'%caiNameError: name 'cai' is not defined>>> print 'please gave you %(name)'%aTraceback (most recent call last): File " ", line 1, in print 'please gave you %(name)'%aValueError: incomplete format>>> print "gave you %(name)s"%agave you cai>>>
4.字典的方法
- clear
- copy
- get
- has_keys
- items/iteritems
- keys/iterkeys
- pop
- popitem
- setdefault
- update
代码示例
>>> a={'name':'cai','age':12}>>> a.clear()>>> a{}>>> a['name']='cai'>>> a['age']=12>>> a{'age': 12, 'name': 'cai'}>>> b=a.copy()>>> b{'age': 12, 'name': 'cai'}>>> {}.fromkeys(['name','age']){'age': None, 'name': None}>>> dict.fromkeys(['name','age']){'age': None, 'name': None}>>> dict.fromkeys(['name','age'].'(unkown)')SyntaxError: invalid syntax#get方法查看某一元素是否在字典中,,如果存在会得到这个值,如果不能在则会返回None。>>> a={'name':'cai','age':12}>>> a.get('name')'cai'>>> a.get('age')12>>> a.get('gender')>>> a.get('gender','N/A')'N/A'>>> #has_key python3中不使用,其作用相当于 k in d。>>> a.has_key('name')Traceback (most recent call last): File "", line 1, in a.has_key('name')AttributeError: 'dict' object has no attribute 'has_key'>>> #iteams和iteritems(python3.0以后没有了)。items将字典所有的项以列表的形式返回,返回的值是成对的的,返回的顺序是随机的,字典的特性就是元素是随机。#iteritems的作用和items相似,但他返回的不是一个列表对象而是一个迭代器。>>> d={'name':'cai','age':26}>>> d.items()dict_items([('name', 'cai'), ('age', 26)])>>> d.iteritems()#返回的是一个迭代器对象。#keys和iterkeys这两个方法和上面的用法及作用相似。#pop删除对应的键值。>>> d={'name':'cai','age':26}>>> d.pop('name')'cai'{'age': 26}#popitem,方法类似与list.pop()用法相似只不过前者随意删除掉一个元素,后者随即删除一个元素。#python3.0后没有此方法>>> d={'name':'cai','age':28}>>> a.popitem()Traceback (most recent call last): File " ", line 1, in a.popitem()NameError: name 'a' is not defined>>> #setdefault在某种程度上类似于get方法,能够获得与给定键相关联的值,只是get用于检验字典中是否不具备该元素,而setdefault是用来添加一个不具备的元素或者监测某个元素是否存在;还能再字典中添加新的元素。>>> d={}>>> d.setdefault('name','cai')'cai'>>> d{'name': 'cai'}>>> d.setdefault('age',26)26>>> d{'name': 'cai', 'age': 26}>>> d.get('name')'cai'>>> d.get('ren')>>> d{'name': 'cai', 'age': 26}>>> d.setdefault('name')'cai'>>> #update,利用一个字典更新另外一个字典。字典的元素顺序是随机的。python3.0没有itervalues用法。>>> x={'home':'big house','price':'15000/m2'}>>> d.update(x)>>> d{'price': '15000/m2', 'name': 'cai', 'home': 'big house', 'age': 26}>>> x.update(d)>>> x{'price': '15000/m2', 'name': 'cai', 'age': 26, 'home': 'big house'}>>> #values和itervalues,前者返回的是一个值的列表,后者返回的是一个值的可迭代对象。>>> d.values >>> d.values()dict_values(['15000/m2', 'cai', 'big house', 26])>>> d.itervalues()Traceback (most recent call last): File " ", line 1, in d.itervalues()AttributeError: 'dict' object has no attribute 'itervalues'>>>
Python字典包含了以下内置函数:
#str,是数据对象以字符串的形式输出>>> str(d)"{'price': '15000/m2', 'name': 'cai', 'home': 'big house', 'age': 26}">>> #type,返回变量类型,如果是字典则返回字典的类型>>> type(d)>>>
序号 | 函数及描述 |
---|---|
1 | 比较两个字典元素。 |
2 | 计算字典元素个数,即键的总数。 |
3 | 输出字典可打印的字符串表示。 |
4 | 返回输入的变量类型,如果变量是字典就返回字典类型。 |
遍历字典
#遍历key值>>> for key in dict1:... print key... key2key1key>>> for key in dict1:... print dict1[key],key... value3 key2value1 key1value key>>> for i in dict1.keys():... print dict1[i],i... value3 key2value1 key1value key>>> #遍历values值>>> for i in dict1.values():... print(value)... keykeykey>>> for value in dict1.values():... print value... value3value1value>>> for key in dict1:... print dict1[key]... value3value1value#遍历字典项>>> for k,v in dict1.items():... print k,v... key2 value3key1 value1key value>>> for (key,value) in dict1.items():... print key,value... key2 value3key1 value1key value>>>