2012-02-05 3 views
2

나는 dictonaries의 목록을 가지고 있습니다. 이 목록에 iterate를 입력하고 약간 다른 유형의 사전에 매핑하고 싶습니다.하나의 유형에서 다른 유형으로 사전 목록 매핑

원래 사전 :

{'Test Name':blah, 'Test': blah, 'Att a': blah, 'Att b': blah} 

새로운 사전 : 만 속성 테스트 이름 및 테스트에 관심 원본에서

{'Test Name':blah, 'Test': blah, 'Failure': failure, 'Project': project} 

. 새 사전에서 몇 가지 추가 특성을 추가합니다.

이 작업을 수행하려면, 내가 할 :이 읽기 쉬운

mappedFailures = []; 
for fixedFailure in fixedFailures: 
    mappedFailure = {'Test Suite': fixedFailure['Test Suite'], 
        'Test':fixedFailure['Test'], 'Failure':failure, 
        'Project': 'project'} 
    mappedFailures.append(mappedFailure); 

,하지만 난 궁금해서 더 파이썬 방법 덕분이었다.

def map_failure(ff): 
    return {'Test Suite': ff['Test Suite'], 'Test': ff['Test'], 
      'Failure': failure, 'Project': 'project'} 

mappedFailures = [map_failure(ff) for ff in fixedFailures] 
+3

파이썬 3에는 이런 종류의 사용 사례를 위해 고안된 dict 내포물이 포함되어 있습니다. http://www.python.org/dev/peps/pep-0274/ –

+1

첫 번째 'pythonic'할 일은 세미콜론을 버리는 것입니다. –

답변

4

매우 짧은을 달성하기 위해 지능형리스트와 dict constructor을 사용할 수 있습니다 dicts 목록. 이를 위해 단순히 목록 이해를 사용하여 각 fixedFailure을 반복하고 그로부터 새로운 dict를 작성하기 만하면됩니다.

mappedFailures = [ 
    { 
     'Test Name': fixedFailure['Test Name'], 
     'Test':  fixedFailure['Test'], 
     'Failure': failure, 
     'Project': project, 
    } 
    for fixedFailure in fixedFailures 
] 
+0

Dict를 반환하기 위해 메서드를 정의 할 때 특별한 이점이 있습니까? –

+1

@pcperini, 가독성. – senderle

4

당신은이 목록의 이해에 대한 고전적인 사용 사례입니다

mappedFailures = dict((key, fixedFailure[key]) for key in ('Test Name', 'Test')) 
mappedFailures['Failure'] = failure 
mappedFailures['Project'] = project 
+3

전체 사전을 반복 할 필요가 없습니다. 'dict ((test name), 'Test') 키 입력을위한 (key, fixedFailure [key]))' –

+0

맞습니다. Fixed –

1

mappedFailures 실제로 것 같습니다 :

관련 문제