![](/img/trans.png)
[英]Python: remove dictionaries from a list which have same value for a key so that the values of that key are unique for all the dictionaries in the list
[英]Remove all elements from list of dictionaries with one (key, value) repeated
我有此字典列表,我想刪除那些具有相同體裁的字典,直到只有一個,例如,如果我有兩個具有相同體裁的字典(兒童),我只希望刪除第一個,而其他則應刪除。
資源
[
{'genre': 'Kids', 'jpg': 'as.jpg', 'file': '01-26'},
{'genre': 'Kids', 'jpg': 'la.jpg', 'file': '02-02'},
{'genre': 'Action', 'jpg': 'na.jpg', 'file': '01-41'},
{'genre': 'Action', 'jpg': 'lo.jpg', 'file': '00-17'},
{'genre': 'Drama', 'jpg': 'do.jpg', 'file': '01-54'}
]
輸出:
[
{'genre': 'Kids', 'jpg': 'as.jpg', 'file': '01-26'},
{'genre': 'Action', 'jpg': 'na.jpg', 'file': '01-41'},
{'genre': 'Drama', 'jpg': 'do.jpg', 'file': '01-54'}
]
您可以這樣做:
data = [
{'genre': 'Kids', 'jpg': 'as.jpg', 'file': '01-26'},
{'genre': 'Kids', 'jpg': 'la.jpg', 'file': '02-02'},
{'genre': 'Action', 'jpg': 'na.jpg', 'file': '01-41'},
{'genre': 'Action', 'jpg': 'lo.jpg', 'file': '00-17'},
{'genre': 'Drama', 'jpg': 'do.jpg', 'file': '01-54'}
]
seen = set()
result = []
for e in data:
if e['genre'] not in seen:
seen.add(e['genre'])
result.append(e)
print(result)
輸出量
[{'file': '01-26', 'jpg': 'as.jpg', 'genre': 'Kids'}, {'file': '01-41', 'jpg': 'na.jpg', 'genre': 'Action'}, {'file': '01-54', 'jpg': 'do.jpg', 'genre': 'Drama'}]
假設您的清單是l
。 只需掃描列表的末尾,然后將genre
為鍵的字典中的項目存儲在字典中即可。 每個類型中只有第一個類型會保留,其他類型則隱藏。 然后,您只需要放下鍵並保留值即可。
stock = {d['genre']:d for d in reversed (l)}
print( [v for v in stock.values()] )
結果:
[{'genre': 'Drama', 'jpg': 'do.jpg', 'file': '01-54'},
{'genre': 'Action', 'jpg': 'na.jpg', 'file': '01-41'},
{'genre': 'Kids', 'jpg': 'as.jpg', 'file': '01-26'}]
與往常一樣,有多種方法:
data = [
{'genre': 'Kids', 'jpg': 'as.jpg', 'file': '01-26'},
{'genre': 'Kids', 'jpg': 'la.jpg', 'file': '02-02'},
{'genre': 'Action', 'jpg': 'na.jpg', 'file': '01-41'},
{'genre': 'Action', 'jpg': 'lo.jpg', 'file': '00-17'},
{'genre': 'Drama', 'jpg': 'do.jpg', 'file': '01-54'}
]
這里將解決方案作為函數發布:
def filter1(dict_list, by='grenre'):
seen = []
result = []
for e in dict_list:
if e[by] not in seen:
seen.append(e[by])
result.append(e)
return result
這是一個長長的列表串聯:
def filter2(dict_list, by='grenre'):
result = [[e for e in dict_list if e[by]==key][0] for key in set([e[by] for e in dict_list])]
return result
並進行測試:
filter_key = 'genre'
print(filter1(data, by=filter_key))
print(filter2(data, by=filter_key))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.