dictionary是python内置数据结构中最灵活的。列表list是有序的对象集合,而dictionary是无序的集合。最主要的差别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

可变长,异构,任意嵌套。字典可以在原处修改,但不支持用于字符串和列表中的序列操作。因为字典是无序的集合,所以根据固定顺序进行操作是行不通的。

1、dictionary的构造:

D={}        #空字典
D = {'spam':2, 'ham':1, 'eggs':3}    #三项目字典
D = {'food':{'spam':2, 'ham':1, 'eggs':3}    #嵌套
D = dict.fromkeys(['a','b'])        #其他构造技术{'a': None, 'b': None}
D = dict(name='Bob', age=42)        #{'age': 20, 'name': 'Bob'}

除以上几种构造方法外,还有一种key和value对应技术:

>>>keyslist=['spam', 'ham', 'eggs']
>>>valslist=[2,1,3]
>>>D=dict(zip(keyslist, valslist))
{'eggs': 3, 'ham': 1, 'spam': 2}

和list不同,dictionary以key进行索引运算:

>>>D['eggs']
>>>D['food']['ham']
>>>'eggs' in D

以下三种常见操作返回的都是list对象:

>>>D.keys()        #['eggs', 'ham', 'spam']
>>>D.values()      #[3, 1, 2]
>>>D.items()       #[('eggs', 3), ('ham', 1), ('spam', 2)]

值得注意的是以上都是python2.7中的语法,Python3.0中,必须将其放到list调用中,python3.0中的keys()返回一个迭代器:

>>>list(D.keys()) 
>>>list(D.values())
>>>list(D.items())

合并操作如下:

>>>D={'eggs': 3, 'ham': 1, 'spam': 2}
>>>D2={'turkey': 6, 'ham': 2}
>>>D.update(D2)    #合并
>>>print(D)
{'turkey': 6, 'eggs': 3, 'ham': 2, 'spam': 2}

从上面操作可以看出,合并过程中相同key的项会合并,若key相同但value不同,会更新。

删除操作有两种方法。pop()删除这个键对应的值。若删除不存在的键,会报错:

>>>D.pop('eggs')
3
>>>del D['eggs']


其他字典方法:

读取不存在的键往往会出错,用get方法可以避免出错,仅返回None

>>>D.get('spam')        #A key that is there
2
>>>print(D.get('toast'))        #A key that is missing
None
>>>D.get('toast', 88)           #if a key is missing, 88 is default
88


字典的大小比较在Python3.0中不再有效:

>>>D1 > D2        #Python2.6中的字典大小比较
>>>sorted(D1.items()) > sorted(D2.items())    #python3.0


习题:

1、两种方式创建内含5个0的列表

>>>[0,0,0,0,0]
>>>[0]*5

2、两种方式来创建一个字典,有两个键'a','b',而每个键相关联的值都是0.

>>>D={'a':0,'b':0}
>>>L1=['a','b']
>>>D = dict.fromkeys(L1,0)
>>>dict(a=0,b=0)

3、列举四种在原处修改字典对象的运算

>>>D.pop(key)
>>>D['spam']=10
>>>D.update(D2)
>>>del D(key)