如何通过检查最新的时间戳和值从字典列表中提取
How to extract from the list of dictionary by checking latest timestamp and value
下面有一个字典列表 like
my_dictionary = [
{
'name': 'Tester',
'id': '101',
'status': 'Failed',
'lastModifiedDate': '2022-02-14 12:25:32:013302' },
{
'name': 'Developer',
'id': '102',
'status': 'Success',
'lastModifiedDate': '2022-02-14 12:25:32:013302',
},
{
'name': 'Tester',
'id': '101',
'status': 'Failed',
'lastModifiedDate': '2022-02-21 12:25:32:013302' }
]
- 我有两个
name
值作为 Tester
或 Developer
- 通过检查最新的
lastModifiedDate
需要提取 Tester
、Developer
的最新条目
下面代码实现的逻辑如下:
- 先在
lastModifiedDate
的基础上降序排列
- 提取字典列表中的第一个匹配项。
response = sorted(my_dictionary, key=lambda x: x['lastModifiedDate'], reverse=True)
response_latest = []
for item in response:
extracted_response = {}
for field in item:
if item['name'] == 'Tester':
extracted_response[field] = item[field]
response_latest.append(extracted_response)
break
for field in item:
if item['name'] == 'Developer':
extracted_response[field] = item[field]
response_latest.append(extracted_response)
break
response_latest
上面的代码在输入上面的字典列表时的输出是
[{'name': 'Tester',
'id': '101',
'status': 'Failed',
'lastModifiedDate': '2022-02-21 12:25:32:013302'}]
但预期输出是
[{'name': 'Tester',
'id': '101',
'status': 'Failed',
'lastModifiedDate': '2022-02-21 12:25:32:013302'},
{'name': 'Developer',
'id': '102',
'status': 'Success',
'lastModifiedDate': '2022-02-14 12:25:32:013302'}]
此外,如果缺少 Developer
或 Tester
字典名称值,代码不应失败。
my_dictionary = [{'name': 'Tester', 'id': '101', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302'},
{'name': 'Tester', 'id': '101', 'status': 'Failed', 'lastModifiedDate': '2022-02-21 12:25:32:013302'}]
如果pandas
在场:
import pandas as pd
df = pd.DataFrame(myd)
maxes = df.groupby('name')['lastModifiedDate'].transform('max')
result = df[df['lastModifiedDate'] == maxes].to_dict(orient='records')
输出:
>>> result
[{'name': 'Developer', 'id': '102', 'status': 'Success', 'lastModifiedDate': '2022-02-14 12:25:32:013302'}, {'name': 'Tester', 'id': '101', 'status': 'Failed', 'lastModifiedDate': '2022-02-21 12:25:32:013302'}]
我尝试过滤 myd
然后找到每一个的最新版本。
tester = list(filter(lambda x: x["name"] == "Tester", myd))
developer = list(filter(lambda x: x["name"] == "Developer", myd))
tester_latest = sorted(tester, key=lambda x: x["lastModifiedDate"], reverse=True)
developer_lastest = sorted(developer, key=lambda x: x["lastModifiedDate"], reverse=True)
response_latest = [
tester_latest[0] if len(tester_latest) > 0 else None,
developer_lastest[0] if len(developer_lastest) > 0 else None
]
response_latest = list(filter(None, response_latest)
response_latest
您可以尝试将字典列表转换为 pandas 数据框的方法,并对其执行一些操作。
此示例包括两个 Tester
词典,它们具有相同的 lastModifiedDate
但在 Developer
的情况下具有不同的 lastModifiedDate
my_dictionary_list = [
{
'name': 'Tester',
'id': '101',
'status': 'Failed',
'lastModifiedDate': '2022-02-14 12:25:32:013302'},
{
'name': 'Developer',
'id': '102',
'status': 'Success',
'lastModifiedDate': '2022-02-14 12:25:32:129405'},
{
'name': 'Tester',
'id': '103',
'status': 'Failed',
'lastModifiedDate': '2022-02-14 12:25:32:013302'},
{
'name': 'Developer',
'id': '102',
'status': 'Success',
'lastModifiedDate': '2022-02-21 12:25:32:113215'},
{
'name': 'Tester',
'id': '103',
'status': 'Failed',
'lastModifiedDate': '2022-02-12 12:25:32:013302'},
]
import pandas as pd
df = pd.DataFrame(my_dictionary_list)
maxes_by_group = df.groupby(['name'])['lastModifiedDate'].transform(max)
print("maxes_by_group output - \n{}".format(maxes_by_group))
result = df[df['lastModifiedDate'] == maxes_by_group].to_dict(orient='records')
print("--------------------")
print("Final result output - \n{}".format(result))
输出-
maxes_by_group output -
0 2022-02-14 12:25:32:013302
1 2022-02-21 12:25:32:113215
2 2022-02-14 12:25:32:013302
3 2022-02-21 12:25:32:113215
4 2022-02-14 12:25:32:013302
Name: lastModifiedDate, dtype: object
--------------------
Final result output -
[{'name': 'Tester', 'id': '101', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302'}, {'name': 'Tester', 'id': '103', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302'}, {'name': 'Developer', 'id': '102', 'status': 'Success', 'lastModifiedDate': '2022-02-21 12:25:32:113215'}]
maxes_by_group
变量输出表示 lastModifiedDate
值的降序排序。
您可以在最终的 result
变量输出中看到三个词典。两个 Tester
名称值具有相同的最大 lastModifiedDate
值,一个 Developer
名称值具有最大 lastModifiedDate
值。
下面有一个字典列表 like
my_dictionary = [
{
'name': 'Tester',
'id': '101',
'status': 'Failed',
'lastModifiedDate': '2022-02-14 12:25:32:013302' },
{
'name': 'Developer',
'id': '102',
'status': 'Success',
'lastModifiedDate': '2022-02-14 12:25:32:013302',
},
{
'name': 'Tester',
'id': '101',
'status': 'Failed',
'lastModifiedDate': '2022-02-21 12:25:32:013302' }
]
- 我有两个
name
值作为Tester
或Developer
- 通过检查最新的
lastModifiedDate
需要提取Tester
、Developer
的最新条目
下面代码实现的逻辑如下:
- 先在
lastModifiedDate
的基础上降序排列 - 提取字典列表中的第一个匹配项。
response = sorted(my_dictionary, key=lambda x: x['lastModifiedDate'], reverse=True)
response_latest = []
for item in response:
extracted_response = {}
for field in item:
if item['name'] == 'Tester':
extracted_response[field] = item[field]
response_latest.append(extracted_response)
break
for field in item:
if item['name'] == 'Developer':
extracted_response[field] = item[field]
response_latest.append(extracted_response)
break
response_latest
上面的代码在输入上面的字典列表时的输出是
[{'name': 'Tester',
'id': '101',
'status': 'Failed',
'lastModifiedDate': '2022-02-21 12:25:32:013302'}]
但预期输出是
[{'name': 'Tester',
'id': '101',
'status': 'Failed',
'lastModifiedDate': '2022-02-21 12:25:32:013302'},
{'name': 'Developer',
'id': '102',
'status': 'Success',
'lastModifiedDate': '2022-02-14 12:25:32:013302'}]
此外,如果缺少 Developer
或 Tester
字典名称值,代码不应失败。
my_dictionary = [{'name': 'Tester', 'id': '101', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302'},
{'name': 'Tester', 'id': '101', 'status': 'Failed', 'lastModifiedDate': '2022-02-21 12:25:32:013302'}]
如果pandas
在场:
import pandas as pd
df = pd.DataFrame(myd)
maxes = df.groupby('name')['lastModifiedDate'].transform('max')
result = df[df['lastModifiedDate'] == maxes].to_dict(orient='records')
输出:
>>> result
[{'name': 'Developer', 'id': '102', 'status': 'Success', 'lastModifiedDate': '2022-02-14 12:25:32:013302'}, {'name': 'Tester', 'id': '101', 'status': 'Failed', 'lastModifiedDate': '2022-02-21 12:25:32:013302'}]
我尝试过滤 myd
然后找到每一个的最新版本。
tester = list(filter(lambda x: x["name"] == "Tester", myd))
developer = list(filter(lambda x: x["name"] == "Developer", myd))
tester_latest = sorted(tester, key=lambda x: x["lastModifiedDate"], reverse=True)
developer_lastest = sorted(developer, key=lambda x: x["lastModifiedDate"], reverse=True)
response_latest = [
tester_latest[0] if len(tester_latest) > 0 else None,
developer_lastest[0] if len(developer_lastest) > 0 else None
]
response_latest = list(filter(None, response_latest)
response_latest
您可以尝试将字典列表转换为 pandas 数据框的方法,并对其执行一些操作。
此示例包括两个 Tester
词典,它们具有相同的 lastModifiedDate
但在 Developer
lastModifiedDate
my_dictionary_list = [
{
'name': 'Tester',
'id': '101',
'status': 'Failed',
'lastModifiedDate': '2022-02-14 12:25:32:013302'},
{
'name': 'Developer',
'id': '102',
'status': 'Success',
'lastModifiedDate': '2022-02-14 12:25:32:129405'},
{
'name': 'Tester',
'id': '103',
'status': 'Failed',
'lastModifiedDate': '2022-02-14 12:25:32:013302'},
{
'name': 'Developer',
'id': '102',
'status': 'Success',
'lastModifiedDate': '2022-02-21 12:25:32:113215'},
{
'name': 'Tester',
'id': '103',
'status': 'Failed',
'lastModifiedDate': '2022-02-12 12:25:32:013302'},
]
import pandas as pd
df = pd.DataFrame(my_dictionary_list)
maxes_by_group = df.groupby(['name'])['lastModifiedDate'].transform(max)
print("maxes_by_group output - \n{}".format(maxes_by_group))
result = df[df['lastModifiedDate'] == maxes_by_group].to_dict(orient='records')
print("--------------------")
print("Final result output - \n{}".format(result))
输出-
maxes_by_group output -
0 2022-02-14 12:25:32:013302
1 2022-02-21 12:25:32:113215
2 2022-02-14 12:25:32:013302
3 2022-02-21 12:25:32:113215
4 2022-02-14 12:25:32:013302
Name: lastModifiedDate, dtype: object
--------------------
Final result output -
[{'name': 'Tester', 'id': '101', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302'}, {'name': 'Tester', 'id': '103', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302'}, {'name': 'Developer', 'id': '102', 'status': 'Success', 'lastModifiedDate': '2022-02-21 12:25:32:113215'}]
maxes_by_group
变量输出表示 lastModifiedDate
值的降序排序。
您可以在最终的 result
变量输出中看到三个词典。两个 Tester
名称值具有相同的最大 lastModifiedDate
值,一个 Developer
名称值具有最大 lastModifiedDate
值。