字典是多个键值对构成的集合,创建一个字典除了按定义赋值键值对外,还有很多其他的方式可以创建字典。
1 键值对创建字典
这种方式适合体量较小的字典。
d = {1 : 12, "a" : 34, "name" : 13}
2 dict函数创建字典
可以借助字典的dict函数来创建一个字典,形式很多。
(1) 变量赋值的方式
参数是带变量赋值的方式、赋值符号前是键值key(此种方式键不能为数,否则会被视为表达式),赋值符号后是值value,想创建几项就有写入几个这样的参数。
d = dict(b = 12, a = 34, name = 13)
print d
(2)二元组集合方式
另外二元组集合(有两个元素的集合)也可作为dict函数参数,从而构造出一个以二元组第一值为键,第二个数据项值为值的字典。
i = [(1, 3), ("a", 13)]
d = dict(i)
print d
i = ((1, 3), ("a", 13))
d = dict(i)
print d
i = [[1, 2], ("a", 23)]
d = dict(i)
print d
i = ([1, 1], ["a", 33])
d = dict(i)
print d
程序执行结果如下:
{'a': 13, 1: 3}
{'a': 13, 1: 3}
{'a': 23, 1: 2}
{'a': 33, 1: 1}
(3) zip方式
zip函数可以将多个集合对应位置元素构成一个元组建立一个长度为多个集合中最短值的集合。
a = range(5)
b = range(10, 17)
c = range(20, 30)
print a
print b
print c
d = zip(a, b, c)
print d
程序执行结果如下:
[0, 1, 2, 3, 4]
[10, 11, 12, 13, 14, 15, 16]
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
[(0, 10, 20), (1, 11, 21), (2, 12, 22), (3, 13, 23), (4, 14, 24)]
a集合的长度最短为5,b为7而c的长度为10,d集合的构建是从a、b、c对应位置取值组建一个元组作为d对应位置的数据项,例如:a[1] = 1, b[1] = 11, c[1] = 21,那么(1, 11, 21)作为d[1]的值。
节组zip的特性,可以给zip函数传两个(有序)集合,第一个集合里的各项元素值作为键,第二个集合里的各项数据值作为新生成字典的值。
(4) map方式
zip函数仅仅对传入的集合对应位置取值,构建对儿或者元组,对应位置的数据间是没有任何关系的,如果我们想存储一条直线的x和y值的字典(目的是给出x值就知道这条直线上y的值)这是最终的字典的key和value间是有一定关系的,那么可以用map的结果作为dict的参数构造字典。
例子:假设存储直线$y = 2x + 1$的坐标数据用字典存储
a = range(-5, 5)
def linef(x):
return (x, 2 * x + 1)
d = dict(map(linef, a))
print d
程序执行结果:
{0: 1, 1: 3, 2: 5, 3: 7, 4: 9, -2: -3, -5: -9, -4: -7, -3: -5, -1: -1}
map函数的第一个参数是一个函数,从第2个参数开始是有序集合,map的作用原理是对后续所有的有序集合的第i个位置的数据都传入到第一个参数处理,故map里有多少个有序集合,map函数的第一个参数的那个函数就应该有多少个形参。
本例子用map实现方式定义的函数(map的第一个参数)有很多形式和方法,本例还以用下面的代码实现。
a = range(-5, 5)
b = []
for v in a:
b.append(2 * v + 1)
def linef(x, y):
return (x, y)
d = dict(map(linef, a, b))
print d