2012-02-05 5 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); 

Это легко читать, но мне было интересно было более вещий способ Спасибо.

+3

Python 3 включает в себя диктофонные решения, предназначенные для такого использования. См. Http://www.python.org/dev/peps/pep-0274/ –

+1

Первой «питонической» задачей является сбросить точки с запятой. –

ответ

4

Это классический случай использования для списка понимания:

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] 
+0

Есть ли какое-то конкретное преимущество для определения метода только для возврата dict? –

+1

@pcperini, словом, читаемость. – senderle

4

Вы можете использовать список понимание и dict constructor достичь очень короткий

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

На самом деле нет необходимости перебирать весь словарь. Вы можете просто выбрать нужные ключи: 'dict ((key, fixedFailure [key]) для ввода ключа ('Test Name', 'Test'))' –

+0

Вы правы. Исправлено: –

1

Оказывается, что mappedFailures на самом деле список диктов. Для этого вы просто хотите использовать понимание списка, чтобы перебирать каждый fixedFailure и строить из него новый dict.

mappedFailures = [ 
    { 
     'Test Name': fixedFailure['Test Name'], 
     'Test':  fixedFailure['Test'], 
     'Failure': failure, 
     'Project': project, 
    } 
    for fixedFailure in fixedFailures 
] 
Смежные вопросы