使用以下目录:
[ {'isn': '1', 'fid': '4', 'val': '1', 'ptm': '05/08/2019 14:22:39', 'sn': '111111' 'procesado': '0'},
{'isn': '1', 'fid': '4', 'val': '0', 'ptm': '05/08/2019 13:22:39', 'sn': '111111', 'procesado': '0'},
<...> ]
如果列表中有其他元素,我需要对每个dict进行比较:
这可以用一种传统的方式来实现,即使用一个外部for-internal-while循环,但这并不是实现这一点的最佳方式。你知道吗
为了找到一种方法,我尝试了这样的方法:
for p in lista:
print([item for item in lista if ((item["sn"] == p["sn"]) & (item["val"] == 0) & (p["val"] == 1) & (
datetime.strptime(item["ptm"], '%d/%m/%Y %H:%M:%S') < datetime.strptime(p["ptm"],'%d/%m/%Y %H:%M:%S')))])
但这不起作用(也不是最佳的)
只需构建一个从
(fid,sn,val)
到候选列表的映射(整个dict
,它的索引,或者只是它的ptm
(如下所示),这取决于您需要的输出)。还要检查它的对数值(在(fid,sn,!val)
下)是否已经存在,如果已经存在,则进行ptm
比较:如果有大量值具有相同的键,则可以使用树来加速
ptm
比较,但这在这里似乎不太可能。对单个值使用实数据类型,或者使用namedtuple
来包含它们,当然会使这变得更好。你知道吗相关问题 更多 >
编程相关推荐