我有一个列表如下
[
{'x':'1','y':'1'},{'x':'2','y':'2'},{'x':'1','y':'1'}
]
我希望得到一个新的列表,如下(独特元素)
[
{'x':'1','y':'1'},{'x':'2','y':'2'}
]
最好的方法是什么?
我有一个列表如下
[
{'x':'1','y':'1'},{'x':'2','y':'2'},{'x':'1','y':'1'}
]
我希望得到一个新的列表,如下(独特元素)
[
{'x':'1','y':'1'},{'x':'2','y':'2'}
]
最好的方法是什么?
import ast
l = [
{'x':'1','y':'1'},{'x':'2','y':'2'},{'x':'1','y':'1'}
]
[ast.literal_eval(el1) for el1 in set([str(el2) for el2 in l])]
通常,保持独特元素的简单方法是将它们添加到集合中。但是,由于字典不可用(不能放入集合),因此我提供了一种解决方法。首先,将字符串转换为字符串,放置在一个集合中(以保留唯一的字符串),然后使用ast.literal_eval将其转换回字符串。
为什么不使用repr(字典)字典 - >字典? – 2012-07-31 14:07:20
或者,做一下black_dragon做的事,然后将它们转换成元组,然后返回.. – 2012-07-31 14:10:28
'str(d)'是否总是以相同的顺序遍历键,值对? – DSM 2012-07-31 14:18:56
>>> lst = [{'x':'1','y':'1'},{'x':'2','y':'2'},{'x':'1','y':'1'}]
>>> map(dict, set(tuple(x.items()) for x in lst))
[{'y': '1', 'x': '1'}, {'y': '2', 'x': '2'}]
>>>
我其实不确定这是否有效。我不知道是否可以保证两个相同的字符串的'.items()'以相同的顺序返回。 – DSM 2012-07-31 14:15:59
在示例不同对象(即两个具有不同ID的对象)中是两个相同的字符吗?如果是这样,问题就更复杂了,因为制作一个唯一列表的方法,如投射到一个集合等等将不起作用。 – 2012-07-31 14:02:51
谢谢@DSM,你的建议工作正常 – Jisson 2012-07-31 14:13:00