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)