我有此词典的列表,我想删除那些具有相同体裁的词典,直到只有一个,例如,如果我有两个具有相同体裁的词典(儿童),我只希望第一个词典,而其他则应被删除。
来源
[
{'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'}
]
答案 0 :(得分:2)
您可以这样做:
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'}]
答案 1 :(得分:0)
假设您的列表为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'}]
答案 2 :(得分:0)
通常有多种方法:
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))