1.可以直接用键值对进行创建:
>>> d_test={"abc":"123","bcd":"456","cde":"789"} >>> d_test {'bcd': '456', 'cde': '789', 'abc': '123'}
2.利用dict函数生成字典
>>> item=[('abc',123),('bcd',456),('cde',567)] >>> d_test2=dict(item) >>> d_test2 {'bcd': 456, 'cde': 567, 'abc': 123} >>> d_test3 = dict(abc=123,bcd=456,cde=789) >>> d_test3 {'bcd': 456, 'cde': 789, 'abc': 123} >>> d_test3 = dict('abc'=123,'bcd'=456) File "", line 1 SyntaxError: keyword can't be an expression
注意:如果按照例子中item方式生成字典,string类型一定要引号,如果按照下面的创建字典一定要不要加引号,否则会报错
二.字典的基本操作:
d_test是一个字典
len(d_test3) 返回字典d中键值对的数量
>>> len(d_test3) 3
d_test[k]返回关联到键k上的值,k值如果不存在时候,会报异常
>>> d_test3['abc'] 123 >>> d_test3['123'] Traceback (most recent call last): File "", line 1, in KeyError: '123'
d_test[k]=val 是把val值关联到键k上,若是不存在,添加
>>> d_test3['abc']='abc' >>> d_test3 {'bcd': 456, 'cde': 789, 'abc': 'abc'} >>> d_test3['xyz']=123 >>> d_test3 {'bcd': 456, 'cde': 789, 'xyz': 123, 'abc': 'abc'}
del d_test[k] 删除键为K的项,若不存在,报错:
>>> del d_test3['xyz'] >>> d_test3 {'bcd': 456, 'cde': 789, 'abc': 'abc'} >>> del d_test3['xyz'] Traceback (most recent call last): File "", line 1, in KeyError: 'xyz'
三.字典对象的方法
1.clear清除方法,清除字典中的所有项,没有返回值。
>>> d_test3.clear() >>> d_test3 {}
2.copy复制方法,复制的方法两个对象各自作修改,对复制的对象或元对象都没有影响,只对本身的对象有影响
>>> d_test3 = dict(abc=123,bcd=456,cde=789) >>> d_test4=d_test3.copy(); >>> d_test4['abc']=456 >>> d_test4 {'bcd': 456, 'cde': 789, 'abc': 456} >>> d_test3 {'bcd': 456, 'cde': 789, 'abc': 123} >>> d_test3['abc']='dtest3' >>> d_test3 {'bcd': 456, 'cde': 789, 'abc': 'dtest3'} >>> d_test4 {'bcd': 456, 'cde': 789, 'abc': 456}
以上复制被称为浅复制:还有深复制。深复制确切不是说字典的方法。不过也可以看一下。以下例子可以看出当深复制修改的值是原子类型(数字,字符串)等,深复制和浅复制是没有什么变化的,当修改对象为序列等复杂对象的时候,深复制不会随着原对象的改变而改变,而copy方法就会进行改变
>>> d_test3 = dict(abc=123,bcd=456,cde=[789,123,456]) >>> from copy import deepcopy >>> d_test4=d_test3.copy() >>> d_test4 {'bcd': 456, 'cde': [789, 123, 456], 'abc': 123} >>> d_test5=deepcopy(d_test3) >>> d_test5 {'bcd': 456, 'cde': [789, 123, 456], 'abc': 123} >>> d_test3['abc']='test3' >>> d_test5 {'bcd': 456, 'cde': [789, 123, 456], 'abc': 123} >>> d_test4 {'bcd': 456, 'cde': [789, 123, 456], 'abc': 123} >>> d_test3 {'bcd': 456, 'cde': [789, 123, 456], 'abc': 'test3'} >>> d_test3['cde'].remove(123) >>> d_test3 {'bcd': 456, 'cde': [789, 456], 'abc': 'test3'} >>> d_test4 {'bcd': 456, 'cde': [789, 456], 'abc': 123} >>> d_test5 {'bcd': 456, 'cde': [789, 123, 456], 'abc': 123}
3.get和setdefault方法:
get:当K值存在的时候。字典[K]取值的方法和get方法相同的,但是get(K)不存在,不会报异常,默认返回none值,也可以是设定值。
setdefault,当key存在的时候,返回key对象,当key不存在可以设置对象。注意,改变字典对象
>>> d_test3 = dict(abc=123,bcd=456,cde=[789,123,456]) >>> d_test3.get('abc') '123' >>> d_test3.get('abcd') >>> d_test3.get('abcd','hello') 'hello' >>> d_test.setdefault('cde','123') '789' >>> d_test {'bcd': '456', 'cde': '789', 'abc': '123'} >>> d_test.setdefault('cdee','123') '123' >>> d_test {'bcd': '456', 'cde': '789', 'abc': '123', 'cdee': '123'}
4.fromkeys方法:默认可以新建一个字典,且key指定的值,键默认值为none,也可以进行指定
5.has_key:判断K是否存在,返回boolean类型
6迭代对象:
a.items和iteritems
items:把字典中的对象以列表的形式返回,列表中的每个对象的为(键,值)
iteritems:返回字典的迭代器对象,而不是一个列表
>>> d_test.items() [('bcd', '456'), ('cde', '789'), ('abc', '123')] >>> it=d_test.iteritems() >>> list(it) [('bcd', '456'), ('cde', '789'), ('abc', '123')]
b.keys和iterkeys
与items相似,不过只返回键的对象
>>> d_test.keys() ['bcd', 'cde', 'abc'] >>> keyit=d_test.iterkeys() >>> list(keyit) ['bcd', 'cde', 'abc']
c.values和itervalues:和keys和iterkeys对象类似。
7.移除
pop可以移除指定的key,及和这个key关联的对象。注意:当key不存在的时候,就会报异常
popitem移除字典中随机一个对象
8.修改
利用update方法,可以用一个字典修改另一个字典。注意:更新格式:字典1.update(字典2),字典2中的key存在字典1中的时候,字典1中key所对应的值修改成字典2中key所绑定的值
若key不存在,就会添加到字典1
>>> d_test1={'abc':'abc'} >>> d_test.update(d_test1) >>> d_test {'bcd': '456', 'cde': '789', 'abc': 'abc'} >>> d_test1 {'abc': 'abc'} >>> d_test2={'abcc':'abc'} >>> d_test.update(d_test2) >>> d_test {'bcd': '456', 'cde': '789', 'abc': 'abc', 'abcc': 'abc'}