下面是我的字典
myd = [
{
'name': 'Abc',
'id': '101',
'status': 'Success',
'lastModifiedDate': '2022-02-14 12:25:32:013302' },
{
'name': 'Abc',
'id': '101',
'status': 'Failed',
'lastModifiedDate': '2022-02-21 12:25:32:013302' },
{
'name': 'def',
'id': '102',
'status': 'Failed',
'lastModifiedDate': '2022-02-14 12:25:32:013302' },
{
'name': 'ghi',
'id': '103',
'status': 'Success',
'lastModifiedDate': '2022-02-14 12:25:32:013302' },
{
'name': 'ijk',
'id': '110',
'status': 'Failed',
'lastModifiedDate': '2022-02-14 12:25:32:013302' },
{
'name': 'ijk',
'id': '110',
'status': 'Failed',
'lastModifiedDate': '2022-02-14 12:25:32:013302' }
]
- 我需要提取字典狀態只是“失敗”
- 如果狀態為“成功”
id而狀態為“失敗”,則必須從串列中洗掉該詞典 - 只有 Failed 必須在字典中添加
- 如果兩個 id 都失敗了,那么它可以添加那個字典
預計出局
myd = [
{
'name': 'def',
'id': '102',
'status': 'Failed',
'lastModifiedDate': '2022-02-14 12:25:32:013302' },
{
'name': 'ijk',
'id': '110',
'status': 'Failed',
'lastModifiedDate': '2022-02-14 12:25:32:013302' }
]
代碼如下
#Remove duplicates
new = [dict(t) for t in {tuple(d.items()) for d in myd}]
for i in new:
if i['id] ==
uj5u.com熱心網友回復:
使用集合來檢查成員的速度。使用集合推導首先創建成功的 id 串列。遍歷您的串列myd并檢查您的條件;如果他們滿意,則追加到生成的 id 串列中,并將id 添加到看到的 id 集合中。
successful_ids = {x['id'] for x in myd if x['status'] == 'Success'}
seen_ids = set()
new_d = []
for x in myd:
if (x['status'] == 'Failed'
and x['id'] not in successful_ids
and x['id'] not in seen_ids):
new_d.append(x)
seen_ids.add(x['id'])
print(new_d)
# [{'name': 'def', 'id': '102', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302'}, {'name': 'ijk', 'id': '110', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302'}]
uj5u.com熱心網友回復:
您可以找到所有成功的并以此為基礎進行過濾。使用帶有 id 作為鍵和 dict 作為值的字典,并獲取值以使結果唯一:
succeeded = {d["id"] for d in myd if d["status"] == "Success"}
result = list({d["id"]: d for d in myd if d["id"] not in succeeded}.values())
結果(列印得很漂亮):
[
{'id': '102',
'lastModifiedDate': '2022-02-14 12:25:32:013302',
'name': 'def',
'status': 'Failed'
},
{'id': '110',
'lastModifiedDate': '2022-02-14 12:25:32:013302',
'name': 'ijk',
'status': 'Failed'
}
]
請記住,這忽略了,lastModifiedDate但如果你想考慮到這一點,那就很簡單了。
uj5u.com熱心網友回復:
最簡單但不是最快的解決方案是構建對失敗 id 的理解,并使用它為每個失敗的 id 選擇一個字典
failed_ids = list(set([d['id' for d in myd if d['status'] == 'Failed']))
result = []
for d in myd:
if d['id'] in failed_ids:
result_ids.delete(d['id'])
result.append(d)
或者,沒有理解
result = []
failed_ids = []
for d in myd:
if d['id'] not in failed_ids and d['id'] == "Failed":
result_ids.append(d['id'])
result.append(d)
myd = result
uj5u.com熱心網友回復:
counter = 0
newDict=[]
dictCounter = 0
for i in myd:
if i['status'] == 'Failed':
newDict.append(myd[counter])
counter =1
print(newDict)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/489884.html
