如何检查Python字典中存储的所有列表值是否全部相等
问题分析
你的实现不正确,核心问题是逻辑和需求完全不匹配:
- 你的需求是判断字典存储的所有列表值(作为整体)是否完全相等
- 而你现有代码的逻辑是将所有列表的单个元素全部拉平、转字符串后统计去重后的元素个数。你的测试用例中每个列表都包含
0.2和0.30000000004两个不同的浮点数,转字符串后也是两个不同的值,因此set去重后长度为2,和「列表是否整体相等」没有任何关联。
修复方案
要判断多个列表是否完全相等,可以将每个列表转为可哈希的元组后再用集合去重,若去重后长度为1则说明所有列表完全一致:
def equalDict(values): unique_lists = set(tuple(item) for item in values) return 1 if len(unique_lists) == 1 else len(unique_lists)
调用测试:
sample = {'w0':[0.2, 0.2, 0.30000000004],'w1': [0.2, 0.2, 0.30000000004],'w2': [0.2, 0.2, 0.30000000004], 'w3': [0.2, 0.2, 0.30000000004]} print(equalDict(sample.values())) # 输出结果为1,符合预期
补充说明
如果你的实际场景中存在浮点数精度误差(比如理论上相等的两个值因计算误差出现0.3和0.3000000000001的差异),可以在转元组前先对所有浮点数做近似处理,比如保留固定小数位后再比较。
内容的提问来源于stack exchange,提问作者honj - t
相关产品推荐
相关产品推荐

