Python词典列表投影,过滤器或子集?

时间:2013-07-15 16:53:37

标签: python functional-programming functools

我正在尝试创建我认为从较大的字典空间到较小维度空间的'投影'。所以,如果我有:

mine = [
{"name": "Al", "age": 10},
{"name": "Bert", "age": 15},
{"name": "Charles", "age": 17}
]

我正在尝试查找仅返回的函数表达式:

[
{"name": "Al"},
{"name": "Bert"},
{"name": "Charles"}
]

我试过......

>>> filter(lambda x: x['name'],mine)
[{'age': 10, 'name': 'Al'}, {'age': 15, 'name': 'Bert'}, {'age': 17, 'name': 'Charles'}]
>>> map(lambda x : x['name'],mine)
['Al', 'Bert', 'Charles']

但似乎仍然缺少正确的功能。我知道如何使用列表理解,但想学习如何在功能上这样做。

2 个答案:

答案 0 :(得分:16)

听起来像是列表推导的工作,无论你是否喜欢它们。

>>> [{"name": d["name"]} for d in mine]
[{'name': 'Al'}, {'name': 'Bert'}, {'name': 'Charles'}]

没有列表解析的解决方案需要额外的函数定义:

def project(key, d):
    return {k: d[k]}

map(partial(project, "name"), mine)

lambda(哎呀):

map(lambda d: {"name": d["name"]}, mine)

答案 1 :(得分:0)

CODE:

print([{'name': d['name']} for d in mine])

输出:

[{'name': 'Al'}, {'name': 'Bert'}, {'name': 'Charles'}]