我仍然不太熟悉列表的组成和东西,所以我很感谢你的帮助。
我有一个字典列表,每个字典中包含一个url和一个数字,如下所示:
data = [{'url': 'www.url1.com', 'max': '14.6'},
{'url': 'www.url2.com', 'max': '17.8'},
{'url': 'www.url2.com', 'max': '18.4'},
{'url': 'www.url3.com', 'max': '15.5'}]
我想过滤掉任何具有重复url
键的字典,即使max
键与其他重复条目不同。
我的预期结果是:
data = [{'url': 'www.url1.com', 'max': '14.6'},
{'url': 'www.url2.com', 'max': '17.8'},
{'url': 'www.url3.com', 'max': '15.5'}]
我已经尝试了相当多的事情,但没有一个足够接近,以在这里张贴,以修复。
感谢您的帮助,谢谢!
发布于 2018-06-06 08:15:38
尝试创建一个字典理解,然后获取它的值,然后将其转换为列表:
data = [{'url': 'www.url1.com', 'max': '14.6'},
{'url': 'www.url2.com', 'max': '17.8'},
{'url': 'www.url2.com', 'max': '18.4'},
{'url': 'www.url3.com', 'max': '15.5'}]
print(list({v['url']:v for v in data}.values()))
输出:
[{'url': 'www.url1.com', 'max': '14.6'}, {'url': 'www.url2.com', 'max': '18.4'}, {'url': 'www.url3.com', 'max': '15.5'}]
发布于 2018-06-06 07:52:37
这里有一种使用toolz.unique
的方法。如果您没有此第三方库,则可以使用等效的unique_everseen
itertools recipe
from toolz import unique
from operator import itemgetter
res = list(unique(data, key=itemgetter('url')))
print(res)
[{'url': 'www.url1.com', 'max': '14.6'},
{'url': 'www.url2.com', 'max': '17.8'},
{'url': 'www.url3.com', 'max': '15.5'}]
发布于 2018-06-06 08:07:23
对于纯python方法:
data = [{'url': 'www.url1.com', 'max': '14.6'},
{'url': 'www.url2.com', 'max': '17.8'},
{'url': 'www.url2.com', 'max': '18.4'},
{'url': 'www.url3.com', 'max': '15.5'}]
seen_before = []
for d in data:
if d['url'] not in seen_before:
seen_before.append(d['url'])
print(seen_before)
https://stackoverflow.com/questions/50710422
复制相似问题