Python迭代,删除重复项

时间:2014-05-13 08:29:05

标签: python list dictionary iteration

我想迭代字典列表并删除重复值

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!

3 个答案:

答案 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'}]