我的数据如下。
[
{
"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"
}
]
我做错了,请帮忙。
答案 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
,而无需更改词典理解部分。例如,如果您必须同时跳过type
和entity
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]