直接创建字典:用户可以通过直接定义字典的方式来创建字典。
dict = {"one":1,"two":2,"three":3}
此方法多用于当键值对较少时 或者 键和值不存在于列表,元组中的时候使用。(字典其实是两个序列之间的映射。假设有两个列表:list1和list2。list1和list2中都有两个元素,通过某种方法可以让list1中的第一个元素和list2中的第一个元素对应,list1中的第二个元素和list2中的第二个元素相对应。这种方法在下面 间接创建字典 中会讲到。)
间接创建字典:
间接创建字典是利用字典是由序列经过映射形成的特性产生的。(在本篇中序列指的是列表和元组)
(一)dict()函数与zip()函数
dict()函数与zip()函数经常搭配起来,用来实现 序列与序列之间的映射 和 形成字典 两个步骤。
序列与序列间的映射dict()函数:
list1=["one","two","three"]
list2=[ 1 , 2 , 3 ](此处加空格是为了方便观看 , list2实际上是[1,2,3])
将列表1映射到列表2上,可以这样表示("one",1),("two",2),("three",3)。
其实这样表示的原因不难理解。函数坐标的表示其实就是一种映射,将自变量映射到因变量上。我们假设列 表1是自变量,列表而是因变量。经过映射后产生坐标("one",1),("two",2),("three",3)。
在这个例子中列表中只有三个元素,我们手动映射也是行的通的。但如果列表中有成千上万个元素该怎么办
呢?zip()函数来帮忙。
zip()函数用于将可迭代对象作为参数,将对象中的元素打包成一个个元组,然后返回这些元组组成的列表[1]
举个例子:
list1 = ["one","two","three"]
list2 = [1,2,3]
zipped = zip(list1,list2)
在python2中zip()函数返回的是一个列表,可以被print()函数打印出来。
#python2中
print(zipped)
[("one",1),("two",2),("three",3)] #程序运行完后
在python3中zip()函数返回的是一个zip对象,不能被打印出来。
#python3中
print(zipped)
<zip object at 0x00000221047ADF08> #打印出来的结果 zip object 表示zip对象
#0x00000221047ADF08 表示该对象所在的位置
其实可以把zipped理解为(("one",1),("two",2),("three",3)),所以zip()函数是一个将两个序列映射后再打包的的过程(最外面的一层括号理解为打包,里面的括号是映射)。
(("one",1),("two",2),("three",3))无论从格式上还是从概念上都很像是一个元组,但由于它是由zip()函数所形成的,它的属性已经被zip()函数所规定(实际上是被zip()函数的作者所定)。通过dir()函数可以看到这个对象的属性。
print(dir(zipped))
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
#从返回的结果中我们可以看到zipped其实是一个可迭代对象,他没有可打印的属性
形成字典dict()函数:经过zip()函数处理过的序列可以直接投给dict()函数用于形成字典。
list1 = ["one","two","three"]
list2 = [1,2,3]
zipped = zip(list1,list2)
dict1 = dict(zipped)
print(dict1)
{'one': 1, 'two': 2, 'three': 3} #最后打印出来的结果
[1] 菜鸟教程 http://www.runoob.com/python/python-func-zip.html