2013-07-15 1 views
3

저는 더 큰 사전 공간에서 더 작은 차원 공간으로의 '투영'이라고 생각하는 것을 만들려고합니다. 그래서, 내가있는 경우 : ...파이썬 사전 목록, 필터 또는 하위 집합?

[ 
{"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'] 

을하지만 것 :

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

나는 단지 돌아 기능적 표현을 찾기 위해 노력하고있어 여전히 올바른 기능을 잃어 버릴 수 있습니다. 목록 작성을 통해이를 수행하는 방법을 알고 있지만이를 기능적으로 수행하는 방법을 배우고 싶습니다.

답변

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

귀하의 람다 버전을 반환'[설정 ([ '알', '이름']), 설정 ([ '버트', '이름']) 설정 ([ 'Charles', 'name'])]', 아, 쉼표를 콜론으로 대체하십시오. – Mittenchops

+0

@Mittenchops : 죄송합니다. –

+0

오른쪽, 잡았다, 물론 간단합니다 ... 한숨. 고맙습니다. – Mittenchops

0

CODE :

출력 :

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