我想迭代字典列表并删除重复值
example = [
{ 'name' : 'John', 'name2' : 'Mike' },
{ 'name' : 'Smith', 'name2' : 'John' },
{ 'name' : 'Bob', 'name2' : 'Bob' },
{ 'name' : 'Mike', 'name2' : 'Smith' }
{ 'name' : 'Mike', 'name2' : 'Maria' }
]
我需要获得结果列表,如下所示,没有重复值:
output = [
{ 'name' : 'John' },
{ 'name' : 'Mike' },
{ 'name' : 'Smith' },
{ 'name' : 'Bob' },
{ 'name' : 'Maria' }
]
我应该用什么来获得这个结果? thnks!
答案 0 :(得分:2)
通过链接字典的values
来获取所有名称。然后使用set
这些名称创建词典。
>>> import itertools
>>> [{'name': name} for name in set(itertools.chain.from_iterable(e.values() for e in example))]
[{'name': 'Mike'}, {'name': 'John'}, {'name': 'Smith'}, {'name': 'Bob'}, {'name': 'Maria'}]
答案 1 :(得分:0)
利用Python 集的强大功能获取不同的项目:
example = [
{ 'name' : 'John', 'name2' : 'Mike' },
{ 'name' : 'Smith', 'name2' : 'John' },
{ 'name' : 'Bob', 'name2' : 'Bob' },
{ 'name' : 'Mike', 'name2' : 'Smith' }
]
distinct = set()
for item in example:
distinct.add(item['name'])
distinct.add(item['name2'])
output = list()
for item in distinct:
output.append({'name' : item})
print output
答案 2 :(得分:0)
只需创建一个空数组,循环遍历您的值,如果它不在空数组中,则为每个数组添加它:
example = [
{ 'name' : 'John', 'name2' : 'Mike' },
{ 'name' : 'Smith', 'name2' : 'John' },
{ 'name' : 'Bob', 'name2' : 'Bob' },
{ 'name' : 'Mike', 'name2' : 'Smith' },
{ 'name' : 'Mike', 'name2' : 'Maria' }
]
result = []
for ex in example:
for name in ex.values():
entry = { 'name' : name }
if not entry in result:
result.append(entry)
print result
输出:
[{'name': 'Mike'}, {'name': 'John'}, {'name': 'Smith'}, {'name': 'Bob'}, {'name': 'Maria'}]