zip压缩:使用keys压缩Python字典

Python: Zip dict with keys

本问题已经有最佳答案,请猛点这里访问。

我有:

1
2
list_nums = [1,18]
list_chars = ['a','d']

我想要:

1
2
list_num_chars = [{'num':1, 'char':'a'},
                  {'num':18, 'char':'d'}]

是否有比以下更优雅的解决方案:

1
list_num_chars = [{'num':a, 'char':b} for a,b in zip(list_nums, list_chars)]


1
map(dict, map(lambda t:zip(('num','char'),t), zip(list_nums,list_chars)))

给予:

1
[{'char': 'a', 'num': 1}, {'char': 'd', 'num': 18}]

如果初始列表很长,您可能希望使用itertools.izip()而不是zip(),以略微提高性能和减少内存使用,但除此之外,我无法想到一种显著"更好"的方法。


声明一个新变量,该变量是dict的键

1
2
3
4
from itertools import izip
nums  = [1,18]
chars = ['a','d']
keys  = ["num","char"]      # include list of keys as an input

我想这会给你一个更优雅的解决方案。

1
[dict(zip(keys,row)) for row in izip(nums,chars)]

当有更多的键时(这就是为什么我首先开始寻找这个解决方案的原因),它肯定会更优雅。

如果需要,此调整与生成器相同:

1
(dict(zip(keys,row)) for row in izip(nums,chars))