2007-09-19

 

Python Cookbook 4.11 快速构建字典

需求:

你想创建一个字典,它的键值都是字符串,而且你不希望一个个的添加它们.

讨论:

一旦你开始使用Python,你会发现需要使用很多很多的字典,当键都是字符串的时候,可以使用dict的命名参数语法来创建:

data = dict(red=1, green=2, blue=3)

它比下面这个等效的写法简洁许多:

data = {'red': 1, 'green': 2, 'blue': 3}

创建字典比较有效的方法就是使用dict函数,它比自己使用括号, 分号的语法来创建字典便捷许多.使用dict,可以避免使用过多的引号,只要键的名称个Python的默认保留字不同.你不能使用类似'12ab'或者'for',因为'12ab'不是以字母开头,而'for'是Python的保留字.
在Python中,用大括号来定义字典是唯一使用大括号的地方:假如你不喜欢使用大括号,或者键盘布局中它很难够到(意大利的键盘就是这样!),你可以使用dict()来代替{ }构造空字典.
使用dict还有别的好处,调用dict(d)可以返回已有字典的一个副本,就像调用d.copy()一样,不过,使用dict还有更多的好处,即使d是(key,value)形式的列表也能工作.一个常见的字典构造语法是:
d = dict(zip(the_keys, the_values))
其中the_keys是一个包含key的列表,the_values是和它对应的value的列表,内建函数zip返回一个(key,value)形式的列表, dict函数可以接收这样的列表为参数来构造一个字典.如果列表很长,比使用itertools模块要快一些:
import itertools
d = dict(itertools.izip(the_keys, the_values))
内建的zip方法在内存中构造一个列表,而izip一次只使用一个值对.在我的机器上,对于10,000的数字,后面的方法大约比前面的方法快两倍.
在调用dict的时候,你既可以使用位置参数,也可以使用命名参数(如果二者冲突,以命名参数为准),比如,你需要设置最开始说明的不能做为命名参数的键:

d = dict({'12ba':49, 'for': 23}, rof=41, fro=97, orf=42)

如果你想创建一个字典,其中每个键所对应的值是一样的, 使用dict.fromkeys(keys,value)(如果没有value,默认是None),比如,我们创建一个统计ascii码出现频率的字典:

import string
count_by_letter = dict.fromkeys(string.ascii_lowercase, 0)

相关说明:

fromkeys(...)
    dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
    v defaults to None.

Comments: 发表评论



<< Home

This page is powered by Blogger. Isn't yours?