我有一个列表,其中包含字典:
lst = [
{'a':{'a1':1,'a2':2},
'b':{'b1':1,'b2':2},
'c':{'c1':1,'c2':2}},
{'a':{'a2':2,'a1':1},
'b':{'b1':1,'b2':2},
'c':{'c1':1,'c2':2}},
{'a':{'a1':1,'a2':2},
'b':{'bb1':11,'bb2':22},
'c':{'c1':1,'c2':2}},
{'b':{'b1':1,'b2':2},
'a':{'a1':1,'a2':2},
'c':{'c1':1,'c2':2}},
{'a':{'a1':1,'a2':2},
'b':{'b1':1,'b2':2}}]
我只想选择唯一的键(这意味着它们具有相同的键和值名称以及相同数量的键和值,但是如果某些字典相同,但是键值的顺序不同,则它们相同类型)。 因此输出必须是这样的:
[
{'a':{'a1':1,'a2':2},
'b':{'b1':1,'b2':2},
'c':{'c1':1,'c2':2}},
{'a':{'a1':1,'a2':2},
'b':{'bb1':11,'bb2':22},
'c':{'c1':1,'c2':2}},
{'a':{'a1':1,'a2':2},
'b':{'b1':1,'b2':2}}]
我该怎么办?
答案 0 :(得分:1)
您可以将字典转换为字符串,将其添加到集合中,然后解析并将其再次转换为列表。
import json
s = set(json.dumps(i, sort_keys=True) for i in lst)
unique_list = [json.loads(n) for n in list(s)]
答案 1 :(得分:0)
可能具有列表理解功能:
print ([i for n, i in enumerate(lst) if i not in lst[n + 1:]])
答案 2 :(得分:0)
您可以执行以下操作:
lst = [
{'a':{'a1':1,'a2':2},
'b':{'b1':1,'b2':2},
'c':{'c1':1,'c2':2}},
{'a':{'a2':2,'a1':1},
'b':{'b1':1,'b2':2},
'c':{'c1':1,'c2':2}},
{'a':{'a1':1,'a2':2},
'b':{'bb1':11,'bb2':22},
'c':{'c1':1,'c2':2}},
{'b':{'b1':1,'b2':2},
'a':{'a1':1,'a2':2},
'c':{'c1':1,'c2':2}},
{'a':{'a1':1,'a2':2},
'b':{'b1':1,'b2':2}}]
def shared_items(x, y):
return (cmp(x, y) == 0)
new_lst = []
count = 0
for d1 in lst:
if not new_lst:
new_lst.append(d1)
else:
count = len(new_lst)
for d2 in new_lst:
if not shared_items(d1, d2):
count -= 1
if count == 0:
new_lst.append(d1)
for elem in new_lst:
print(elem)
输出将是:
{'a': {'a1': 1, 'a2': 2}, 'c': {'c2': 2, 'c1': 1}, 'b': {'b1': 1, 'b2': 2}}
{'a': {'a1': 1, 'a2': 2}, 'c': {'c2': 2, 'c1': 1}, 'b': {'bb2': 22, 'bb1': 11}}
{'a': {'a1': 1, 'a2': 2}, 'b': {'b1': 1, 'b2': 2}}
注意 cmp()
对python 2和3均有效