从字典列表中获取最新时间戳



我有一份从票务系统中提取的词典列表。每个字典都包含票证的名称和时间戳。

在某些情况下,为同一用户输入多个票证,我希望筛选此列表,只将"最新"时间戳附加到列表中,而不是所有出现的时间戳。

编辑:我希望返回一个字典列表,其中包括具有最大Date值的所有唯一Name值的列表

我已经包含了更新的列表示例,这些示例可能会使工作变得更容易。

我收集数据的功能是:

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" }
]

您可以使用itertools.groupby

import itertools
lst = [
{ "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" }
]
res = []
for key, group in itertools.groupby(lst, lambda x: x["Name"]):
res.append(max(group, key= lambda y: y['Date']))

print(res)

输出:

[
{'Name': 'Rob Smith', 'Date': '3'}, 
{'Name': 'Bill Bob', 'Date': '7'}, 
{'Name': 'Sam Jackson', 'Date': '1'}
]

作为一种选择,你可以使用熊猫。

import pandas as pd
df = pd.DataFrame(lst)
res = df.groupby('Name')['Date'].max().reset_index().to_dict('records')
print(res)

# [{'Name': 'Bill Bob', 'Date': '7'},
#  {'Name': 'Rob Smith', 'Date': '3'},
#  {'Name': 'Sam Jackson', 'Date': '1'}]

最新更新