我有两个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键/值,但其他的是字符串。
我在这个简单的问题上花了太多时间,不知道还有什么可做。
答案 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