如何uniqify在python字典的名单

我有一个列表:

d = [{'x':1, 'y':2}, {'x':3, 'y':4}, {'x':1, 'y':2}]

{'x':1, 'y':2}来一次我想从list.My结果中删除它应该是更多:

d = [{'x':1, 'y':2}, {'x':3, 'y':4} ]

注: list(set(d))是不是在这里工作引发错误。

--------------解决方案-------------

这为我工作:

>>> [dict(y) for y in set(tuple(x.items()) for x in d)]
[{'y': 4, 'x': 3}, {'y': 2, 'x': 1}]

编辑:

我没有重复尝试过了,它似乎做工精细

>>> d = [{'x':1, 'y':2}, {'x':3, 'y':4}]
>>> [dict(y) for y in set(tuple(x.items()) for x in d)]
[{'y': 4, 'x': 3}, {'y': 2, 'x': 1}]

>>> d = [{'x':1,'y':2}]
>>> [dict(y) for y in set(tuple(x.items()) for x in d)]
[{'y': 2, 'x': 1}]

类型的字典都没有哈希的,所以你不能把它们放在一组。 一个比较有效的方法是打开(key, value)对到一个数组和散列的元组(随意消除中间变量):

tuples = tuple(set(d.iteritems()) for d in dicts)
unique = set(tuples)
return [dict(pairs) for pairs in unique]

如果值并不总是哈希,这是根本不可能用套,你就会有propably使用使用为O(n ^ 2)方法in每个单元检查。

避免这一整个问题和使用namedtuples代替

from collections import namedtuple

Point = namedtuple('Point','x y'.split())
better_d = [Point(1,2), Point(3,4), Point(1,2)]
print set(better_d)

一个简单的循环:

tmp=[]

for i in d:
if i not in tmp:
tmp.append(i)
tmp
[{'x': 1, 'y': 2}, {'x': 3, 'y': 4}]

另一个黑暗魔法(请不要打我):

map(dict, set(map(lambda x: tuple(x.items()), d)))

分类:蟒蛇 时间:2015-03-15 人气:0
本文关键词: 蟒蛇
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.282 (s). 10 q(s)