如何在Python的map中返回多值?单次map拆分字典列表键值
如何用一次map函数拆分字典列表的多组值?
当然可以做到!其实只需要结合map和zip的特性,就能用一次map调用完成你想要的拆分,而且代码还很简洁。
直接上解决方案:
adict = {'name': 'John Doe', 'age': 18} bdict = {'name': 'Jane Doe', 'age': 20} l = [adict, bdict] name_vals, age_vals = map(list, zip(*map(lambda d: (d['name'], d['age']), l)))
运行后就能得到你想要的结果:
>>> name_vals ['John Doe', 'Jane Doe'] >>> age_vals [18, 20]
拆解一下这个逻辑:
- 首先,
map(lambda d: (d['name'], d['age']), l)会遍历列表l里的每个字典,把每个字典转换成包含name和age值的元组,得到一个迭代器,内容是('John Doe', 18), ('Jane Doe', 20)。 - 然后
zip(*...)是关键操作,它会把这些元组“转置”——也就是把所有元组的第一个元素聚合为一组,第二个元素聚合为一组,得到两个迭代器,分别对应所有name值和所有age值。 - 最后用
map(list, ...)把这两个迭代器转换成列表,这样就能直接解包赋值给name_vals和age_vals了。
如果不需要列表格式,只需要可迭代对象的话,甚至可以省略外层的map(list, ...),直接用name_vals, age_vals = zip(*map(...)),得到的是元组形式的结果,同样能满足多数场景的需求。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

