将字典列表从一种类型映射到另一种类型

时间:2012-02-05 20:51:10

标签: python

我有一些dictonaries。我希望类型迭代这个列表并将其映射到略有不同类型的字典。

原始字典:

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

这很容易阅读,但我想知道有更多的pythonic方式谢谢。

3 个答案:

答案 0 :(得分:4)

您可以使用列表推导和dict constructor来实现非常短的

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

答案 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]

答案 2 :(得分:1)

mappedFailures实际上是一个dicts列表。为此,您只需要使用列表推导来迭代每个fixedFailure并从中构建一个新的字典。

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