如何比较python中list、string和integer的两个字典?

2024-05-26 16:28:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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,以便在print语句中显示unmatchedkey:value对(如果有的话)。你知道吗

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

Tags: 对象列表value错误items语句resultsdict
3条回答

你得到这个错误是因为当你呼叫结果.项目(),它返回一个不可哈希的列表。

使代码正常工作的一个简单方法是遍历每个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]))

你不可能得到这么简单的解决方案。你知道吗

如果列表是字典中唯一不可修改的类型,则可以创建用于将列表转换为元组的比较的字典:

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. 将dict转换为字符串
  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'}
    ?   
    

相关问题 更多 >

    热门问题