字典键的特性:

(1)不允许同一个键出现两次:创建时如果同一个键被赋值两次,后一个值会覆盖前一个
(2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行

格式:d = {key1 : value1, key2 : value2 }

字典创建:

#元组列表形式创建字典:
>>> dic1 = dict((['ip','127.0.0.1'],['port','8080']))
>>> dic1
{'ip': '127.0.0.1', 'port': '8080'}

#列表元组形式创建字典:
>>> dic2 = dict([('ip','192.168.1.1'),('port','443')])
>>> dic2
{'ip': '192.168.1.1', 'port': '443'}

#表达式方式创建字典: 注意如果是字符串不能用这种方式创建!
>>> dic3 = dict(x=10,y=20,z=30)
>>> dic3
{'z': 30, 'x': 10, 'y': 20}

#**dic3方式创建字典
>>> dic4 = dict(**dic3)
>>> dic4
{'z': 30, 'x': 10, 'y': 20}

#fromkeys方式创建字典: 创建一个默认字典,字典中元素具有相同的value值
>>> dic5 = {}.fromkeys(('x','y'),100)
>>> dic5
{'x': 100, 'y': 100}
>>> dic6 = {}.fromkeys('x','y')
>>> dic6
{'x': 'y'}
>>> dic7 = {}.fromkeys(['x','y'])
>>> dic7
{'x': None, 'y': None}
>>> dic8 = {}.fromkeys('abcd','1')
>>> dic8
{'b': '1', 'c': '1', 'a': '1', 'd': '1'}

字典访问:

dict1 = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} 
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])

输出结果:

dict1['Name']: Runoob
dict1['Age']: 7

修改字典:

dict1 = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
dict1['Age'] = 8; # 更新 Age
dict1['School'] = "菜鸟教程" # 添加新信息
print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])

输出结果:

dict1['Age']: 8
dict1['School']: 菜鸟教程

字典删除:

>>> dict1 = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>> dict1.pop('Age')   #删除某个键值
>>> dict1
{'Class': 'First', 'Name': 'Runoob'}
>>> del dict1['Name']   #删除某个键值
>>> dict1
{'Class': 'First'}
>>> dict1.clear()   #清空字典
>>> dict1
{}
>>> del dict1   #删除整个字典
>>> del dict1
>>> dict1
Traceback (most recent call last):
  File "<pyshell#96>", line 1, in <module>
    dict1
NameError: name 'dict1' is not defined

字典遍历:

例1:在遍历时,可以用enumerate()得到索引位置

dict1 = {'name': 'pingy', 'age': 30}
for k, v in dict1.items():
    print(k, v)

输出结果:

name pingy
age 30

例2:遍历技巧,新添加索引位置

for i, v in enumerate(['tic', 'tac', 'toe']):
    print(i,v)

输出结果:

0 tic 
1 tac
2 toe

例3:

questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
    print('[%s]:[%s]'%(q,a))

输出结果:

[name]:[lancelot]
[quest]:[the holy grail]
[favorite color]:[blue]

字典内置函数:

len(dict)  #计算字典元素个数,即键的总数
str(dict)  #输出字典以可打印的字符串表示
>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>> str(dict)
"{'Name': 'Runoob', 'Class': 'First', 'Age': 7}"

.clear()  #删除字典内所有元素
.copy()  #返回一个字典的浅复制
.fromkeys()  #创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
.get(key,default=None)  #返回指定键的值,如果值不在字典中返回default值
.items()  #以列表返回可遍历的(键,值)元组数组
.keys()  #以列表返回一个字典所有的键
>>> d1 = {'addr':{'ip':127.0.0.1,'port':80},'msg':18}
>>> d1.keys()
dict_keys(['msg', 'addr'])

.values()  #以列表返回字典中的所有值
>>> d1 = {'addr':{'ip':127.0.0.1,'port':80},'msg':18}
>>> d1.values()
dict_values([19, {'ip': '127.0.0.1', 'port': 80}])

.setdefault(key, default=None)  #和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
 >>> d1 = {'1':'one','2':'two'}
  >>> d1.setdefault('1','ONE')
  'one'
  >>> d1
  {'1':'one','2':'two'}   #由于键1已经存在,则不会修改
  >>> d1.setdefault('0','zero')   #键0不存在,则会追加到字典中
  'zero'
  >>> d1
  {'0': 'zero', '1': 'one', '2': 'two'}

.update() #把字典dict2的键/值对更新到dict里
>>> a = {'a':1, 'b':2}
>>> a.update({'c':3})
>>> a
{'a': 1, 'c': 3, 'b': 2}
>>> a.update({'c':4})
>>> a
{'a': 1, 'c': 4, 'b': 2}
例:
>>> for i in reversed(range(1, 10, 2)):
        print(i)

输出结果:
9
7
5
3
1
例:
>>> l1=[1,2,3]
>>> l2=['a','b','c']
dict(map(lambda x,y:[x,y], l1,l2))

输出结果:
{1: 'a', 2: 'b', 3: 'c'}

 

posted on 2016-08-31 18:06  PingY  阅读(270)  评论(0编辑  收藏  举报