2015-04-02 23 views
0

我JSON對象的兩個列表:Python的檢查jsons的兩個列表是相等的

[{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鍵/值,但其他的字符串。

我在這個簡單的問題上花費了太多的時間,沒有任何線索要做什麼。

+1

這不是有效的JSON,它看起來像Python的字典文字語法。 – 2015-04-02 20:44:53

+0

我打印出來用於(「%s - %s」%(outputs,new_outputs)) – Shayan 2015-04-02 20:47:07

+0

「數量」條目是否重要? – 2015-04-02 20:47:33

回答

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 
2

這裏的訣竅是使用數據結構,該數據結構在執行平等比較時忽略元素出現的順序 - 例如set。試試這個,它使用一套內涵提取的地址和數量從每個列表:

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

鍵值應該是相同的,以地址和金額爲真。 – Shayan 2015-04-02 20:47:58

+0

無論如何,我會嘗試一個嵌套如果 – Shayan 2015-04-02 20:48:12

+0

@Shayanbahal你可以連接地址和金額和比較。 – 2015-04-02 20:48:39

相關問題