下面有一個字典串列,例如
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'}]
uj5u.com熱心網友回復:
如果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'}]
uj5u.com熱心網友回復:
我嘗試過濾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
uj5u.com熱心網友回復:
您可以嘗試將字典串列轉換為 pandas 資料框并對其執行一些操作的方法。
此示例包括兩個Tester具有相同lastModifiedDate但lastModifiedDate在以下情況下不同的字典Developer
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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/430962.html
上一篇:根據值對字典進行排序
