簡體   English   中英

如何將python中的兩個字典與列表,字符串和整數進行比較?

[英]How to compare two dictionaries in python with list, string and integer?

results = {}
expectedResults = {}

results['a'] = 3
results['b'] = [1, 2]
results['c'] = '2A 04 73 74'

expectedResults['a'] = 3
expectedResults['b'] = [1, 2]
expectedResults['c'] = '2A 04 73 74'

compare = dict(set(results.items())-set(expectedResults.items()))
print(str(compare))

我收到以下錯誤。 TypeError:列表對象不可散列

我正在使用以下比較,以便在打印語句中顯示不匹配的鍵:值對(如果有)。

compare = dict(set(results.items())-set(expectedResults.items()))

如果列表是字典中唯一不可散列的類型,則可以創建字典以用於將列表轉換為元組的比較:

results = {'a': 3, 'b': [1, 2], 'c': 'this is unmatched'}
expected_results = {'a': 3, 'b': [1, 2], 'c': 'blablabla'}

a_items = {k: tuple(v) if isinstance(v, list) else v for k, v in results.items()}
b_items = {k: tuple(v) if isinstance(v, list) else v for k, v in expected_results.items()}

compare = dict(set(a_items.items())-set(b_items.items()))
print(compare)

輸出:

{'c': 'this is unmatched'}

您可以利用difflib找到差異。

  1. 將字典轉換為字符串
  2. 檢查字符串之間的區別

     import difflib import pprint results = {} expectedResults = {} results['a'] = 3 results['b'] = [1, 2] results['c'] = '2A 04 73 74' expectedResults['a'] = 3 expectedResults['b'] = [1, 2] expectedResults['c'] = 'test' print '\\n'.join(difflib.ndiff(pprint.pformat(results).splitlines(), pprint.pformat(expectedResults).splitlines())) 

    輸出:

     - {'a': 3, 'b': [1, 2], 'c': '2A 04 73 74'} ? ^^^^^^^^^^^ + {'a': 3, 'b': [1, 2], 'c': 'test'} ? 

您收到此錯誤的原因是,當您調用result.items()時,它將返回一個不可哈希的列表。

使代碼工作的簡單方法是遍歷每個dict項並檢查其是否相等

for i in results:
if(results[i] !=  expectedResults[i]):
    print('different key : value pair')
    print('key : ' + i)
    print('Value in results : ' + str(results[i]))
    print('Value in expectedResults : ' + str(expectedResults[i]))

您無法獲得如此簡單的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM