gpt4 book ai didi

python - 如何在 Python map 中返回多个值?

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:41 25 4
gpt4 key购买 nike

我有一个字典列表:

>>> adict = {'name': 'John Doe', 'age': 18}
>>> bdict = {'name': 'Jane Doe', 'age': 20}
>>> l = []
>>> l.append(adict)
>>> l.append(bdict)
>>> l
[{'age': 18, 'name': 'John Doe'}, {'age': 20, 'name': 'Jane Doe'}]

现在我想按键拆分每个字典的值。目前,我是这样做的:

>>> for i in l:
... name_vals.append(i['name'])
... age_vals.append(i['age'])
...
>>> name_vals
['John Doe', 'Jane Doe']
>>> age_vals
[18, 20]

是否可以通过 map 实现?这样我就不必多次调用 map ,而只需调用一次?

name_vals, age_vals = map(lambda ....)

最佳答案

一种简单而灵活的方法是将您的字典列表“转换”为列表字典。恕我直言,这比创建一堆单独的列表更容易使用。

lst = [{'age': 18, 'name': 'John Doe'}, {'age': 20, 'name': 'Jane Doe'}]
out = {}
for d in lst:
for k, v in d.items():
out.setdefault(k, []).append(v)

print(out)

输出

{'age': [18, 20], 'name': ['John Doe', 'Jane Doe']}

但是如果你真的想使用 map 和单独的列表,有几个选项。威廉已经展示了一种方式。这是另一个。

from operator import itemgetter

lst = [{'age': 18, 'name': 'John Doe'}, {'age': 20, 'name': 'Jane Doe'}]
keys = 'age', 'name'
age_lst, name_lst = [list(map(itemgetter(k), lst)) for k in keys]
print(age_lst, name_lst)

输出

[18, 20] ['John Doe', 'Jane Doe']

如果您使用的是 Python 2,则不需要 map 调用的 list 包装器,但使用它来编写代码是个好主意与 Python 3 兼容。

关于python - 如何在 Python map 中返回多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48112022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com