Python比较具有相似和精确键的字典

2024-10-03 21:32:15 发布

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

我有一个场景,根据一组键比较两个字典。 i、 电子

TmpDict ={}
TmpDict2={}
for line in reader:
    line = line.strip()
    TmpArr=line.split('|')
    TmpDict[TmpArr[2],TmpArr[3],TmpArr[11],TmpArr[12],TmpArr[13],TmpArr[14]]=line
for line in reader2:
    line = line.strip()
    TmpArr=line.split('|')
    TmpDict2[TmpArr[2],TmpArr[3],TmpArr[11],TmpArr[12],TmpArr[13],TmpArr[14]]=line

比较两个键完全相同的字典,这个方法很好,但是有一个公差,我需要考虑一下,那个是。。TmpArr[12],TmpArr[14]是需要确定公差的时间和持续时间好的。请请参见下面的示例

示例:

dict1={(111,12,23,12:22:30,12:23:34,64):     4|1994773966623|773966623|754146741|\N|359074037474030|413025600032728|}
dict2={(111,12,23,12:22:34,12:23:34,60) :4|1994773966623|773966623|754146741|\N|359074037474030|413025600032728|} 

假设我有两个字典,每个字典的长度为1,容差为'4'秒,因此必须将上述键视为匹配的行,即使在4秒的时间和持续时间上存在差异。 我知道字典搜索一个键是o(1),不管长度如何,我如何能以同样的性能实现这个场景。 谢谢


Tags: in示例for字典line时间场景电子
2条回答

如果可以使用更多内存来保持上述代码的性能,那么可以为每个元素插入多个条目。例如“111,12,23,12:22:30,12:23:34,60”,“111,12,23,12:22:30,12:23:34,61”,“。。。,仅为“111,12,23,12:22:30,12:23:34,68”键插入“111,12,23,12:22:30,12:23:34,64”。 如果您不想浪费内存,但o(1)性能保持不变,您可以检查一个键的8个键(4个前键和4个后键)。它有8倍以上的比较比上述代码,但是o(1)也。你知道吗

您至少有以下4个选项:

  1. 在公差范围内存储所有键(占用内存)。

  2. 用公差查找键。请注意,如果公差已定义且为常量,则 查找是C * O(N),也就是O(n)

  3. 结合前面的方法:使用某种方案压缩密钥,比如向下四舍五入到可整除4,向上四舍五入到可整除4,然后将这些密钥的值存储在字典中,并从精确值验证是否正确。

  4. 或者不要使用字典,而是使用某种树结构;请注意,您仍然可以将键的确切部分存储在字典中。

因此,您没有提供足够的信息来决定哪一个是最好的。不过我个人会选3个。你知道吗

相关问题 更多 >