【问题标题】:Python Check if two list of jsons are equalPython检查两个json列表是否相等
【发布时间】:2015-04-02 20:42:29
【问题描述】:

我有两个 JSON 对象列表:

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

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

它们可能以不同的顺序出现,或者一个可能是另一个的子集或只是不同的地址,如果两者都包含相同的 地址/金额,我需要一个函数来只说 True 或 False 如果它们是不同的。

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

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

【问题讨论】:

标签: python json


【解决方案1】:

这里的技巧是使用一个数据结构,在执行相等比较时忽略元素出现的顺序——比如set。试试这个,它使用集合推导从每个列表中提取地址和金额:

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

【讨论】:

  • 地址和金额都需要key值相同为True。
  • 无论如何我都会尝试嵌套 if
  • @Shayanbahal 您可以将地址和金额连接起来并进行比较。
  • @Shayanbahal {(json['address'], json['amount']) for json in lst1} == {(json['address'], json['amount']) for lst2中的json}
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-01-10
    • 1970-01-01
    • 2019-11-04
    • 2013-12-02
    • 1970-01-01
    • 2012-03-26
    • 2015-08-21
    • 1970-01-01
    相关资源
    最近更新 更多