Python字典--笔记
《Python3程序开发指南》
映射:键-值数据项的组合
Python3支持两种无序的映射类型:内置的dict类型、标准库中的collections.defaultdict类型。
Python3.1中引入了有序的映射类型:collections.OrderedDict,与内置dict有相同的方法和属性,但在存储数据时以插入顺序进行。
键:可哈希运算的对象的对象引用;值:任意类型对象的对象引用
使用字典字面值创建 >>> d1=dict({"id":1948,"name":"Washer","size":3}) >>> d1 {'id': 1948, 'name': 'Washer', 'size': 3} 使用关键字参数创建 >>> d2=dict(id=1948,name="Washer",size=3) 从序列中创建,d4中的zip()函数返回一个元组列表 >>> d3=dict([("id",1948),("name","Washer"),("size",3)]) >>> d4=dict(zip(("id","name","dize"),(1948,"Washer",3))) 从字典字面值创建 >>> d5={"id":1948,"name":"Washer","size":3}
迭代:
>>> for item in d1.items(): print item[0],item[1] id 1948 name Washer size 3 第二种方法 >>> for key,value in d1.items(): print key,value id 1948 name Washer size 3
根据字典的值进行迭代
>>> for key in d1.keys(): print key >>> for key in d1: print key >>> for value in d1.values(): print value
字典方法
d.clear() | |
d.copy() | 浅拷贝 |
d.fromkeys(s,v) | 返回一个dict,该字典的键为序列s中的项,值为None或v中的值(若给定了参数v) |
d.get(k) | 返回 键k对应的value,如果k不存在,返回None |
d.get(k,v) | 返回 键k对应的value,如果k不存在,返回v |
d.items() | 返回d中的(key,value)对 |
d.keys() | |
d.pop(k) | 返回k对应的value,并删除键为k的项,若没有产生keyError异常 |
d.pop(k,v) | 返回k对应的value,并删除键为k的项,若没有则返回v |
d.popitem() | 返回并删除dict中一个任意的(key,value),如果d为空产生KeyError异常 |
d.setdefault(k,v) |
同d.get() 不同处:如果k没有在d 中,插入一个键为k,值为None或v(若给定了参数v) |
d.update(a) |
a中未包含在d中的(key,value)添加到d中 同时在a和d中的键,用a中的value替换d中的value a:可以是字典、可以使(key,value)对的一个iterable,或关键字参数 |
d.values() | 返回d中所有值 |
字典内涵
两种语法格式:
[keyexpression:valueexpression for key, value in iterable]
[keyexpression:valueexpression for key, value in iterable if condition]
实例一:如果使用字典内涵创建字典,键为当前目录中文件的文件名,值为以字节计数的文件大小
os.listdir()返回传递给函数的路径中包含的文件与目录列表但列表中不会包含"."或".." os.path.getsize()函数返回给定文件的大小(以字节计数) >>> file_sizes = {name:os.path.getseize(name) for name in os.listdir(".")} >>> file_sizes = {name:os.path.getseize(name) for name in os.listdir(".") if os.path.isfile(name)}
创建反转的目录,比如给定字典d,生成一个新字典,新字典的键是d的值,值是d的键
>>> inverted_d = {v:k for k,v in d.items()}
默认字典----collections.defaultdict
与普通字典的区别:默认字典可以对遗失的键进行处理。其他方面与普通字典一样
例如,对于某个字典d,其中不包含键为m的项,x=d[m]会产生异常。若d为默认字典,那么如果键为m的项不在字典中,就会创建一个新项,其键为m,值默认,并返回新建的项。
创建默认字典:创建默认字典时,可以传入一个工厂函数,调用工厂函数时,将返回某种特定类型的对象。对默认字典调用工厂函数时,将为遗失的键创建默认值。
Python所有的内置类型都可以用作工厂函数,比如,数据类型str可以作为函数str()进行调用,将返回一个空字符串对象
>>> import collections >>> words = collections.defaultdict(int) >>> x = words["xyz"] >>> x 0 >>> words defaultdict(<type 'int'>, {'xyz': 0}) >>>
有序字典---collections.OrderedDict
以数据项插入的顺序进行存储,python3.1引入
有序字典在创建时,如果接收了无序的dict或关键字参数,则数据项顺序将是任意的。原因:在底层,python使用无序的dict传递关键字参数。使用update()方法时也有类似效果。
但如果在创建时,传递键-值对构成的元组列表,则顺序得以保留。
创建有序字典 >>> import collections >>> d = collections.OrderedDict([('z',4),('e',1),('a',4)]) >>> d OrderedDict([('z', 4), ('e', 1), ('a', 4)]) 递增式创建更常见 >>> tasks = collections.OrderedDict() >>> tasks[1] = "Jim" >>> tasks[2] = "Jan" >>> tasks[3] = "Tom" >>> tasks OrderedDict([(1, 'Jim'), (2, 'Jan'), (3, 'Tom')])
生成排序字典可通过 d = collections.OrderedDict(sorted(d.items()))来实现,但对于重新加入新的项再排序,则需要一定的开销。