[英]Python - Check for list duplicates
我在python中有一个这样的列表
my_list = [{'1':'A','2':'B'}]
现在,我想向my_list
附加一些JSON
,但首先我要检查要添加的JSON
是否已存在,我该如何处理?
因此,如果我要追加{'2':'B','1':'A'}
,那么是否不添加?
我该怎么办?
谢谢
您可以检查两个字典是否==
In [2]: {'1':'A','2':'B'}=={'2':'B','1':'A'}
Out[2]: True
因此,要检查my_list
是否存在JSON
,您只需执行以下操作
if JSON in my_list:
#blahblah
更新:
要将set
与数据一起使用,可以定义自己的子类并实现__hash__()
方法。 您可以从这里开始:
class MyJSON(dict):
def __hash__(self):
return hash(json.dumps(self,sort_keys=True))
例:
a=MyJSON({'1':'A','2':'B'})
b=MyJSON({'1':'A','2':'C'})
c=MyJSON({'2':'B','1':'A'}) ## should be equal to a
print a==c # should be True
my_set=set()
my_set.add(a)
my_set.add(b)
my_set.add(c)
for item in my_set:
print item,
## output is {'1': 'A', '2': 'C'} {'1': 'A', '2': 'B'}
用于避免重复的规范数据结构是set
。 如前所述,您无法执行此操作,因为您将在集合中添加dict
,这是不可哈希的。
这个通常的解决方法是要么定义自定义dict
般的对象是可哈希,或冻结您的字典弄成可哈希并添加到组。 我们将做后者。
my_list = [{1:2, 3:4}, {3:4, 1:2}]
result = set()
for json_data in my_list:
result.add(frozenset(json_data.items()))
print(result)
# {frozenset({(1, 2), (3, 4)})}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.