用pythonic的方法合并两个列表成一个字典

两个列表长度相等

如下,两个长度相等的列表:

1
2
>>> keys = ['A', 'B', 'C']
>>> values = [1, 2, 3]

合并后的字典:

1
2
>>> d
{'A': 1, 'B': 2, 'C': 3}

方法如下:

1
2
3
4
5
>>> keys = ['A', 'B', 'C']
>>> values = [1, 2, 3]
>>> d = dict(zip(keys, values))
>>> d
{'A': 1, 'C': 3, 'B': 2}

或是:

1
2
3
4
5
6
>>> keys = ['A', 'B', 'C']
>>> values = [1, 2, 3]
>>> d = {k:v for k,v in zip(keys, values)}
>>> d
{'B': 2, 'C': 3, 'A': 1}
>>>

或是:

1
2
3
4
5
>>> keys = ['A', 'B', 'C']
>>> values = [1, 2, 3]
>>> d = dict(map(lambda k,v : (k,v), keys, values))
>>> d
{'A': 1, 'C': 3, 'B': 2}

两个列表长度不等

如下,两个长度不等的列表:

1
2
>>> keys = ['A', 'B', 'C', 'D', 'E']
>>> values = [1, 2, 3]

希望可以为多出来的(key,value)对指定个默认值,如0:

1
2
>>> d
{'A': 1, 'C': 3, 'B': 2, 'E': 0, 'D': 0}

方法如下:
Python2中使用itertools.izip_longest

1
2
3
4
5
6
>>> keys = ['A', 'B', 'C', 'D', 'E']
>>> values = [1, 2, 3]
>>> from itertools import izip_longest
>>> d = dict(izip_longest(keys, values, fillvalue=0))
>>> d
{'A': 1, 'C': 3, 'B': 2, 'E': 0, 'D': 0}

Python3中使用itertools.zip_longest

1
2
3
4
5
6
>>> keys = ['A', 'B', 'C', 'D', 'E']
>>> values = [1, 2, 3]
>>> from itertools import zip_longest
>>> d = dict(zip_longest(keys, values, fillvalue=0))
>>> d
{'D': 0, 'E': 0, 'B': 2, 'C': 3, 'A': 1}

大师兄 wechat
欢迎关注我的微信公众号:Python大师兄