Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python集合重复和排序_Python_Sorting_Collections_Duplicates - Fatal编程技术网

Python集合重复和排序

Python集合重复和排序,python,sorting,collections,duplicates,Python,Sorting,Collections,Duplicates,我通过遍历日志收集事件的以下数据: Event_code = 'AA1', other_data='test', more_data='test', time_diff='7' Event_code = 'AB2', other_data='test', more_data='test', time_diff='2' Event_code = 'AH3', other_data='test', more_data='test', time_diff='5' Event_code

我通过遍历日志收集事件的以下数据:

Event_code = 'AA1', other_data='test', more_data='test', time_diff='7'    
Event_code = 'AB2', other_data='test', more_data='test', time_diff='2'
Event_code = 'AH3', other_data='test', more_data='test', time_diff='5'    
Event_code = 'AA1', other_data='test', more_data='test', time_diff='9'
我希望收集这些数据,以便集合仅包含给定事件代码的时间差最大的事件代码。因此,在这种情况下,时间差为9的最后一个AA1事件将用时间差为7的较早的AA1事件替换

然后,我希望能够根据时间差进行排序和打印,这将给出:

Event_code = 'AA1', other_data='test', more_data='test', time_diff='9'    
Event_code = 'AH3', other_data='test', more_data='test', time_diff='5'    
Event_code = 'AB2', other_data='test', more_data='test', time_diff='2'
这个问题更多的是一个理论上的“如何最好地做到这一点”,而不是追求确切的代码。我当前创建了一个以事件代码为键的dict of dict,然后当我添加到dict of dict时,我检查事件代码是否已经存在,以及现有时间差是否小于要添加的时间差

我的问题是,它似乎不是很有效或很有吸引力。我的代码目前只能按事件代码排序

这方面的伪代码是:

for match in log_file:
.....
event_code = regex_extract_from_match
log_time_diff = regex_extract_from_match
if event_code in event_dict:
    if event_dict[event_code]['time_diff'] < log_time_diff :
        event_dict[event_code] = dict(zip([other_data, more_data, time)diff], ['test', 'test', log_time_diff))
else:
    event_dict[event_code] = dict(zip([other_data, more_data, time)diff], ['test', 'test', 'log_time_diff'))

如果您已将其全部解析为一个列表,则以这种方式缩减列表时所执行的操作称为reduce,您应该使用reduce()内置函数来构建事件字典


您的排序和打印代码似乎已经足够python了。

再次检查您的括号和括号@Farhadix上面写着伪代码谢谢我来看看reduce()。以上“代码”仍然存在的问题是,我只能按事件代码排序,而不能按时间差异排序。请尝试迭代类似于
sorted(event\u dict,key=operator.itemgetter('time\u diff'))的内容。
for event_code in sorted(event_dict):
    print event_code, other_data, more_data, time_diff