【发布时间】:2017-07-31 20:19:28
【问题描述】:
我有一个具有多个属性的对象列表。我想根据对象的一个属性(country_code)过滤列表,即
当前列表
elems = [{'region_code': 'EUD', 'country_code': 'ROM', 'country_desc': 'Romania', 'event_number': '6880'},
{'region_code': 'EUD', 'country_code': 'ROM', 'country_desc':'Romania', 'event_number': '3200'},
{'region_code': 'EUD', 'country_code': 'ROM', 'country_desc': 'Romania', 'event_number': '4000'},
{'region_code': 'EUD', 'country_code': 'SVN', 'country_desc': 'Slovenia', 'event_number': '6880'},
{'region_code': 'EUD', 'country_code': 'NLD', 'country_desc':'Netherlands', 'event_number': '6880'},
{'region_code': 'EUD', 'country_code': 'BEL', 'country_desc':'Belgium', 'event_number': '6880'}]
想要的列表
elems = [{'region_code': 'EUD', 'country_code': 'ROM', 'country_desc': 'Romania', 'event_number': '6880'},
{'region_code': 'EUD', 'country_code': 'SVN', 'country_desc': 'Slovenia', 'event_number': '6880'},
{'region_code': 'EUD', 'country_code': 'NLD', 'country_desc': 'Netherlands', 'event_number': '6880'},
{'region_code': 'EUD', 'country_code': 'BEL', 'country_desc': 'Belgium', 'event_number': '6880'}]
我可以通过创建字典和 for 循环来实现这一点,但我觉得在 python 中使用 filter() 或 reduce() 函数有更简单的方法,我只是不知道如何。
任何人都可以使用内置的 python 函数来简化下面的代码吗?性能是一个重要因素,因为真实数据将是大量的。
工作代码:
unique = {}
for elem in elems:
if elem['country_code'] not in unique.keys():
unique[elem['country_code']] = elem
print(unique.values())
值得注意的是,我也尝试了下面的代码,但它的性能比当前的工作代码差:
unique = []
for elem in elems:
if not any(u['country_code'] == elem['country_code'] for u in unique):
unique.append(elem)
【问题讨论】:
-
我认为您的第一个工作代码(带有 dict)非常理想。也许使用
collections.OrderedDict这样顺序与列表中的相同,如果这很重要的话。此外,无需致电.keys()。
标签: python dictionary filtering