首页 > 解决方案 > 根据条件在数组中添加随机值

问题描述

我有输入

record = {
    "Data": [{
            "Name": "ABC",
            "Result": "PASSED"
        },
        {
            "Name": "XYZ",
            "Result": "FAILED"
        }]}

现在我想转换为{'PASSED': ['ABC'], 'FAILED': ['XYZ'], 'Values':[]}

但是当我使用下面的代码时

name_keys = ['PASSED', 'FAILED']
transformed_result = {}.fromkeys(name_keys + ['Values'], [])
for each_result in record['Data']:
    result = each_result['Result'].upper()
    if result in name_keys:
        transformed_result[result].append(each_result['Name'])
        print(transformed_result)

我明白了

{'Values': ['ABC', 'XYZ'], 'PASSED': ['ABC', 'XYZ'], 'FAILED':  
['ABC', 'XYZ']}

我正在使用python3。我在哪里做错了?

标签: pythonpython-3.xlistforeach

解决方案


这是因为当您初始化transformed_result字典时,python 首先创建一个新列表(函数中的最后一个参数.from_keys),然后将这个列表分配给字典的所有条目。你可以通过打印它的 id 来检查它是否总是同一个列表:

在我的电脑上:

>>> id(transformed_result['PASSED'])                                                                                                                                                                    
140079882748464 

>>> id(transformed_result['FAILED'])                                                                                                                                                                    
140079882748464 

或者还有:

>>> transformed_result['FAILED'] is transformed_result['PASSED']
True

因此,要解决您的问题,您需要为每个条目提供不同的列表实例。只需将上面的行更改为:

transformed_result = {key: [] for key in name_keys + ['Values']}

推荐阅读