2012-02-05 10 views
2

私は双子座のリストを持っています。このリストに繰り返し入力して、やや異なるタイプの辞書にマップします。辞書のリストをあるタイプから別のタイプにマッピングする

オリジナルの辞書:

{'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

Python 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((テスト名 '、'テスト ')のキー入力のための(key、fixedFailure [key]))' –

+0

あなたは正しいです。固定 –

1

mappedFailuresが実際にあることが表示されます: