2013-07-10 3 views
4

책임의 한계와 법적 고지 이해를 사용하여 사전의 목록에서 목록을 만들 : 나는 파이썬 프로그래밍 (단지 2 일 체험)파이썬 - 특정 키 값을

alist=[{'a':'1a', 'b':'1b'},{'a':'2a','b':'2b'}, {'a':'3a','b':'3b'}] 

가 어떻게 모든 추출하기 위해 이해를 작성할 수 있습니다 새로운 오전 key = 'a'의 값은?

다음 작품들은 내가 원하는 것을 얻을 때까지 해킹했습니다. 배울 좋은 방법이 아닙니다. 이해력에서

[alist['a'] for alist in alist if 'a' in alist] 

나는 을 사용하려고 한 경우 키 = 'A'다른 alist '데이터 없음'

사전에 도와 주셔서 감사에서

+0

루프 변수와 동일한 'alist'를 사용하는 것은 혼란 스럽습니다. 'item '에'a '가있는 경우 alist에있는 항목에 대한 [item ['a ']'가 더 선명합니다. –

답변

8
[elem['a'] for elem in alist if 'a' in elem] 

당신이 위의 무엇을 같이 분석의 명확한 방법이 될 수 있습니다.

"for elem in alist"부분은 alist를 반복하므로 alist의 각 사전을 살펴볼 수 있습니다.

"if 'a'in elem"은 조회가 일어나기 전에 'a'키가 사전에 있는지 확인하여 KeyError가 해당 요소를 찾지 못하도록합니다. 사전에 존재하지 않습니다.

마지막으로 elem [ 'a']을 사용하면 각 사전의 값이 'a'키가됩니다. 이 전 문은 각 사전의 값 목록에 키 'a'를 제공합니다.

희망 사항에 따라 조금 더 명확 해집니다.

+0

이것은'map()'을위한 것입니다. –

+1

'dict'을 변수 이름으로 사용하지 마십시오. 실제 파이썬 내장 함수이기 때문입니다. – SethMMorton

+0

아, 나는 그것에 대해 몰랐다. 나는 그것을 바꿀 것이다, 지금. 감사. – qaphla

3

당신은 할 수 있습니다 :

alist=[{'a':'1a', 'b':'1b'},{'a':'2a','b':'2b'}, {'a':'3a','b':'3b'}] 
new_list = [a.get('a') for a in alist] 

당신이 키 a 만 사전에 제한하려면,

gnibbler의 제안을 바탕으로 5,
new_list = [a.get('a') for a in alist if a.get('a')] 

는 :

new_list = [a.get('a') for a in alist if 'a' in a ] 
+1

'new_list = [a.alist에서 a에 대해 a ('a')를 얻습니다. 그렇지 않으면 원하는 값 ('0','' "'등)을 필터링 할 것입니다. –

+0

동의. 내 대답을 업데이트해도 될까요? – karthikr

+0

물론 아닙니다. 그것이 사이트의 내용입니다. –

1

여기에 ternary expression이 필요하다고 생각합니다.

[dic['a'] if 'a' in dic else 'No Data' for dic in alist] 

또는 사용 dict.get : 여기

[dic.get('a','No Data') for dic in alist] 
1

>>> alist=[{'a':'1a', 'b':'1b'},{'a':'2a','b':'2b'}, {'a':'3a','b':'3b'}] 
>>> from operator import itemgetter 
>>> list(map(itemgetter('a'), alist)) 
['1a', '2a', '3a'] 

은 "데이터 없음"을 얻으려면, 그것은 훨씬 쉽게 기능 프로그래밍 팬들을위한 지능형리스트가없는 방법입니다 목록 이해력 사용

>>> [item.get('a', 'No Data') for item in alist] 
['1a', '2a', '3a'] 

키가 발견되지 않을 경우 dict.get을 사용하면 기본 인수를 지정할 수 있으므로