我在python中有一个像这样的列表
my_list = [{'1':'A','2':'B'}]
现在我想向JSON
添加更多my_list
,但首先我要检查我添加的JSON
是否已经存在,我该怎么做?
所以,如果我要附加{'2':'B','1':'A'}
,我会不会被添加?
我怎么能这样做?
由于
答案 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)})}