Python检查两个jsons列表是否相等

时间:2015-04-02 20:42:30

标签: python json

我有两个JSON对象列表:

[{u'amount': 12000, u'address': u'mqdofsXHpePPGBFXuwwypAqCcXi48Xhb2f'},
 {u'amount': 1000, u'address': u'mkVuZV2kVtMzddQabFDanFi6DTwWYtgiCn'}]

[{"amount": 12000, "address": "mqdofsXHpePPGBFXuwwypAqCcXi48Xhb2f"},
 {"amount": 1000, "address": "mkVuZV2kVtMzddQabFDanFi6DTwWYtgiCn"}]

它们可能有不同的顺序,或者一个可能是另一个的子集或只是不同的地址,如果两者都包含相同的地址/金额,则我需要一个函数来表示True,如果他们是不同的。

我猜问题是有一个unicode键/值,但其他的是字符串。

我在这个简单的问题上花了太多时间,不知道还有什么可做。

2 个答案:

答案 0 :(得分:2)

这里的技巧是使用一种数据结构,忽略执行相等比较时元素出现的顺序 - 比如set。试试这个,它使用set comprehension从每个列表中提取地址和数量:

{(d['address'], d['amount']) for d in lst1} == {(d['address'], d['amount']) for d in lst2}

答案 1 :(得分:0)

所以最后这是我写的,可能不是最有效的方式,但它有效!

def json_equal(json1,json2):

   number_of_items = len(json1)
   for item in json1:
       for item2 in json2:
           if item["address"] == item2["address"]:
               if item["amount"] == item2["amount"]:
                   number_of_items -= 1
                   break
           else:
               continue
   if number_of_items == 0:
       return True
   else:
       return False