Python-字典

阅读更多
一.字典的创建
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'}

你可能感兴趣的:(Python,字典)