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()))
答案 0 :(得分:0)
如果列表是词典中唯一不可用的类型,则可以创建用于比较的词典,将列表转换为元组:
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'}
答案 1 :(得分:0)
你可以利用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'}
?
答案 2 :(得分:0)
您收到此错误是因为当您调用results.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]))
你无法获得像这样简单的解决方案。