Python - 检查列表是否重复

时间:2015-10-30 17:13:23

标签: python list

我在python中有一个像这样的列表

my_list = [{'1':'A','2':'B'}]

现在我想向JSON添加更多my_list,但首先我要检查我添加的JSON是否已经存在,我该怎么做?

所以,如果我要附加{'2':'B','1':'A'},我会不会被添加?

我怎么能这样做?

由于

2 个答案:

答案 0 :(得分:2)

您可以检查两个词典是否与==

相同
In [2]: {'1':'A','2':'B'}=={'2':'B','1':'A'}
Out[2]: True

因此,要检查JSON中是否存在my_list,您只需执行

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'}

答案 1 :(得分:0)

用于避免重复的规范数据结构是set。正如您所提到的,您无法执行此操作,因为您将dict添加到集合中,这是不可用的。

通常的解决方法是定义一个自定义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)})}