最新消息:20210917 已从crifan.com换到crifan.org

【无需解决】Python中判断dict是否存在的逻辑失效

逻辑 crifan 439浏览 0评论
Python代码中,有dict,其中有个float值:
    curSaleDict = {
      "saleId": saleId,
      "personalSaleMoney": personalSaleMoney,
      "saleTime": saleTime,
    }
值:
Added: {'saleId': 'mo1212121212', 'personalSaleMoney': 8703.6162515, 'saleTime': Timestamp('2021-06-07 10:05:20')}
其中代码判断逻辑是:
根据dict,直接去判断是否相等,决定是否已经在全局dict中了:
    if curSaleDict in gLoadedSaleMoneyDict.values():
      print("!!! Duplicated sale record: %s" % curSaleDict)
但是后来发现:
对于,肉眼看起来相同的值,却没有被判断出是相同。
目前怀疑是:float值 pandas解析期间,表面看起来一样,其实内部精度有时候不同,导致值不同。
去想办法验证此思路:暂时把float都改为int,看看是否是漏判,如果没漏判,说明就是float值导致的
好像不是float的原因:
对于:
另外excel中已存在:
且此处只已改为int的:4874
Added: {'saleId': 'jrn12345cccc', 'personalSaleMoney': 4874, 'saleTime': Timestamp('2021-06-09 13:24:50')}
结果还是:逻辑失效,而被加进来了。
而不是希望的:判断出重复,忽略掉
不过,通过调试打印后发现:
此处不是由于float,甚至也不是由于可能的Timestamp
而是:
本身同一个id中,之前有多个值:
对于:
---------- [ 103] 103 ----------
Added: {'saleId': 'jrn12345cccc', 'personalSaleMoney': 4874, 'saleTime': Timestamp('2021-06-09 13:24:50')}
添加 监视 代码:
print(gLoadedSaleMoneyDict["jrn12345cccc"])
输出:
{'saleId': 'jrn12345cccc', 'personalSaleMoney': 5744, 'saleTime': Timestamp('2021-06-10 12:56:10')}
-》很明显,是另外一个时间点的,另外的销售业绩。
-》说明之前是,同一个人,可能在不同时间点,有多个销售业绩的
-》说明自己之前代码逻辑,处理有误,去更新支持这个逻辑。
最后是,改为record的list,然后再判断是否在里面:
historySaleRecordDictList, historySaleTimeDict = loadSaleRecord(SaleHistoryFullPath)

def loadSaleRecord(excelFullPath):
    if curSaleDict in gLoadedSaleRecordDictList:
      print("!!! Duplicated sale record: %s" % curSaleDict)
    else:
      print("Added: %s" % curSaleDict)
      # saleRecordDictList[saleId] = curSaleDict
      # gLoadedSaleRecordDictList[saleId] = curSaleDict
      saleRecordDictList.append(curSaleDict)
      gLoadedSaleRecordDictList.append(curSaleDict)
。。。
即可正常判断 dict是否在 dict的list 中了。

转载请注明:在路上 » 【无需解决】Python中判断dict是否存在的逻辑失效

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
90 queries in 0.204 seconds, using 23.34MB memory