Python:用密钥压缩字典

时间:2011-03-06 01:18:46

标签: python

我有:

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

我想:

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

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

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

3 个答案:

答案 0 :(得分:4)

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

给出:

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

答案 1 :(得分:2)

如果初始列表很长,您可能希望使用itertools.izip()而不是zip()来略微提高性能并降低内存使用量,但除此之外我无法想到“更好的“方法。

答案 2 :(得分:1)

声明一个新变量,它是你的词典的关键

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

这给了一个稍微优雅的解决方案,我想。

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

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

如果你愿意,这个调整与生成器相同:

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