从工单系统字典列表中筛选每个用户的最新时间戳
问题描述
我从工单系统拉取了一组字典列表,每个字典包含工单的用户姓名与timestamp。存在同一用户对应多条工单的情况,我需要筛选该列表,返回仅包含所有唯一用户及其最大Date值的字典列表。
获取数据的Python函数
def get_onboarded_users(): # The ticket that it is retrieving looks something like this: # "(IT) - Onboarding Initiated - Bill Bob" print("Collecting Onboarded Users", end="") url = 'https://********************/api/v3/requests' headers = {"authtoken": "*********************************"} rtn = [] input_data = '''{ "list_info": { "row_count": 5000, "start_index": 1, "sort_field": "subject", "sort_order": "asc", "get_total_count": true, "search_fields": { "subject": "(IT) - Onboarding Initiated" } } }''' params = {'input_data': input_data} response = requests.get(url, headers=headers, params=params) i = json.loads(response.text) user_requests = i['requests'] onboarded_users = {} for user_request in user_requests: subject = user_request['subject'].upper() create_date = req['created_time']['value'] user = subject.split(' - ') onboarded_users['Name'] = user[2] onboarded_users['Date'] = int(create_date) / 1000 rtn.append(onboarded_users.copy()) print(" - Complete") return rtn
API返回原始数据
[ { "Name": "Rob Smith", "Date": "1" }, { "Name": "Rob Smith", "Date": "2" }, { "Name": "Rob Smith", "Date": "3" }, { "Name": "Bill Bob", "Date": "4" }, { "Name": "Bill Bob", "Date": "7" }, { "Name": "Sam Jackson", "Date": "1" } ]
期望结果
[ { "Name": "Rob Smith", "Date": "3" }, { "Name": "Bill Bob", "Date": "7" }, { "Name": "Sam Jackson", "Date": "1" } ]
解决方案
可以通过字典暂存用户的最大日期值,再转换为目标格式的列表:
def filter_unique_users_with_max_date(original_list): user_date_map = {} for item in original_list: name = item["Name"] current_date = int(item["Date"]) # 若用户未记录或当前日期更大,则更新 if name not in user_date_map or current_date > user_date_map[name]: user_date_map[name] = current_date # 转换为要求的字典列表格式 return [{"Name": name, "Date": str(date)} for name, date in user_date_map.items()] # 测试示例 original_data = [ { "Name": "Rob Smith", "Date": "1" }, { "Name": "Rob Smith", "Date": "2" }, { "Name": "Rob Smith", "Date": "3" }, { "Name": "Bill Bob", "Date": "4" }, { "Name": "Bill Bob", "Date": "7" }, { "Name": "Sam Jackson", "Date": "1" } ] print(filter_unique_users_with_max_date(original_data))
另外,原获取数据函数存在一处错误:create_date = req['created_time']['value']中的req应为user_request,修正后片段如下:
for user_request in user_requests: subject = user_request['subject'].upper() create_date = user_request['created_time']['value'] # 修正变量名 user = subject.split(' - ') onboarded_users['Name'] = user[2] onboarded_users['Date'] = int(create_date) / 1000 rtn.append(onboarded_users.copy())
内容的提问来源于stack exchange,提问作者stryker0808
相关产品推荐
相关产品推荐

