我有一个不同“类型”的词典 - >修改和删除。 我想要做到这一点。
myDict =
[
{'type': 'deleted', 'target': {'id': u'1', 'foo': {'value': ''}}},
{'type': 'modified', 'target': {'id': u'1', 'foo': {'value': ''}}},
{'type': 'deleted', 'target': {'id': u'1', 'foo': {'value': ''}}},
{'type': 'deleted', 'target': {'id': u'2', 'foo': {'value': ''}}},
{'type': 'deleted', 'target': {'id': u'2', 'foo': {'value': ''}}},
{'type': 'deleted', 'target': {'id': u'2', 'foo': {'value': ''}}},
{'type': 'deleted', 'target': {'id': u'3', 'foo': {'value': ''}}},
{'type': 'modified', 'target': {'id': u'3', 'foo': {'value': ''}}},
{'type': 'deleted', 'target': {'id': u'3', 'foo': {'value': ''}}}
]
为了获得一个独特的列表,我这样做:
dict((v['target']['id'],v) for v in myDict).values()
[
{'type': 'deleted', 'target': {'foo': {'value': ''}, 'id': u'1'}},
{'type': 'deleted', 'target': {'foo': {'value': ''}, 'id': u'2'}},
{'type': 'deleted', 'target': {'foo': {'value': ''}, 'id': u'3'}}
]
如何根据“几把钥匙”获得一份独特的清单。
我需要两种'类型'。我的预期结果是:
[
{'type': 'deleted', 'target': {'foo': {'value': ''}, 'id': u'1'}},
{'type': 'modified', 'target': {'foo': {'value': ''}, 'id': u'1'}},
{'type': 'deleted', 'target': {'foo': {'value': ''}, 'id': u'2'}},
{'type': 'modified', 'target': {'foo': {'value': ''}, 'id': u'2'}},
{'type': 'deleted', 'target': {'foo': {'value': ''}, 'id': u'3'}}
]
答案 0 :(得分:1)
我不确定我是否明白你的问题,但是,这就是你想要的吗?
from collections import defaultdict
import json
my_list = [
{'type': 'deleted', 'target': {'id': u'1', 'foo': {'value': ''}}},
{'type': 'modified', 'target': {'id': u'1', 'foo': {'value': ''}}},
{'type': 'deleted', 'target': {'id': u'1', 'foo': {'value': ''}}},
{'type': 'deleted', 'target': {'id': u'2', 'foo': {'value': ''}}},
{'type': 'deleted', 'target': {'id': u'2', 'foo': {'value': ''}}},
{'type': 'deleted', 'target': {'id': u'2', 'foo': {'value': ''}}},
{'type': 'deleted', 'target': {'id': u'3', 'foo': {'value': ''}}},
{'type': 'modified', 'target': {'id': u'3', 'foo': {'value': ''}}},
{'type': 'deleted', 'target': {'id': u'3', 'foo': {'value': ''}}}
]
out = defaultdict(set)
for v in my_list:
out[v["type"]].add(json.dumps(v["target"], sort_keys=True))
result = []
for k, v in out.iteritems():
for vv in out[k]:
result.append({
"type": k,
"target": json.loads(vv)
})
print out
print len(out["deleted"])
print len(out["modified"])