[英]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找到差異。
檢查字符串之間的區別
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.