迭代字典列表并创建新的字典列表

时间:2014-03-07 14:39:25

标签: python dictionary

我的数据如下。

[
    {
        "id" : "123",
        "type" : "process",
        "entity" : "abc"
    },
    {
        "id" : "456",
        "type" : "product",
        "entity" : "ab"
    }

]

我循环虽然如下获取id和实体

for test in serializer.data:
    qaResultUnique['id'] = test['id']
    qaResultUnique['entity'] = test['entity']
    uniqueList.append(qaResultUnique)

但错误的输出只是两次获得第二本字典。

[
        {
            "id" : "456",
            "entity" : "ab"
        },
        {
            "id" : "456",
            "entity" : "ab"
        }

    ]

我做错了,请帮忙。

4 个答案:

答案 0 :(得分:8)

您正在重用qaResultUnique字典对象。每次在循环中创建一个 new 字典:

for test in serializer.data:
    qaResultUnique = {}
    qaResultUnique['id'] = test['id']
    qaResultUnique['entity'] = test['entity']
    uniqueList.append(qaResultUnique)

或更简洁地表达:

uniqueList = [{'id': test['id'], 'entity': test['entity']} for test in serializer.data]

答案 1 :(得分:4)

作为@Martijn explained the actual problem,您实际上可以使用字典理解这样做

keys = {"type"}
print [{k:c_dict[k] for k in c_dict if k not in keys} for c_dict in data]
# [{'id': '123', 'entity': 'abc'}, {'id': '456', 'entity': 'ab'}]

您可以使用此方法跳过任意数量的keys,而无需更改词典理解部分。例如,如果您必须同时跳过typeentity

keys = {"type", "entity"}
print [{k:c_dict[k] for k in c_dict if k not in keys} for c_dict in data]
# [{'id': '123'}, {'id': '456'}]

答案 2 :(得分:1)

只需像这样修改。

在:

uniqueList.append(qaResultUnique)

后:

uniqueList.append(dict(qaResultUnique))

答案 3 :(得分:1)

你总是可以像下面这样做

for test in serializer.data:
    uniqueList.append({'id':test['id'],'entity':test['entity']})

或列表理解

uniqueList=[{'id':test['id'],'entity':test['entity']} for test in serializer.data]