我想通过其中一个属性值过滤列表,结果是我得到一个列表,其中该属性值是唯一的。
我目前使用函数
执行此操作def filter_function(self):
filtered = []
for data in self.list_of_data:
exist = False
for f in filtered:
if data.val1 == f.val1:
exist = True
if not exist:
filtered.append(data)
return filtered
其中self.list_of_data是我要过滤掉的列表。 是否可以使用lambda?
使用map或filter函数执行此操作这里数据是一个对象,例如
class Data(object):
def __init__(self)
self.val1
self.val2
...
换句话说,是否可以使用过滤函数来过滤掉'val1'所在的数据对象。等于5,将'thevals'留作'wildcard'?
例如:
filter( lamda x: f(x), [ { 'val1': 5, 'val2': 2}, { 'val1': 5, 'val2': 3}, { 'val1': 2, 'val2': 2}, { 'val1': 2, 'val2': 3}] )
应该有五个
[ { 'val1': 5, 'val2': 2}, { 'val1': 5, 'val2': 3}]
其中f(x)过滤掉其val1不是5的所有对象?
答案 0 :(得分:1)
Sets in Python非常适合过滤重复项。
如果您从列表开始,只需转换为集合:
>>> lst = [1,1,2,3,4,5]
>>> set(lst)
{1, 2, 3, 4, 5}
>>> my_set = set(lst)
>>> revised_lst = list(my_set)
>>> revised_lst
[1, 2, 3, 4, 5]
这摆脱了重复。然后,如果需要,转换回列表:
答案 1 :(得分:0)
class test(object):
def __init__(self):
self.a = 1
self.b = 2
提取你可以做的值:
>>> test().__dict__
输出:
{'a': 1, 'b': 2}
从此处您可以像我在下面显示的那样申请set
您可以使用set
list = [1,2,3,3,4,5,5,5,6,7]
print set(list)
输出:
set([1, 2, 3, 4, 5, 6, 7])
你也可以用另一个过滤你的名单:
list = [1,2,3,4,5,6]
filter = [2,5,7]
print set(list) & set(filter)
输出:
set([2,5])