Python: 用键压缩字典

9 投票
3 回答
27927 浏览
提问于 2025-04-16 13:05

我有:

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 个回答

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))
4
map(dict, map(lambda t:zip(('num','char'),t), zip(list_nums,list_chars)))

给出:

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

如果最开始的列表很长,你可能想用 itertools.izip() 来代替 zip(),这样可以稍微提高性能,减少内存使用。不过除了这个,我想不出有什么特别“更好”的方法来处理这个问题。

撰写回答