我有一个对象列表,我试图根据返回匹配列表的选定条件从中筛选对象。属性包括字符串、整数、浮点和对象。我遇到的问题是试图根据对象属性进行过滤,我想这样做:
findOrder(d, signal='CO', contract.symbol=1)
我不能简单地比较对象本身,因为我只需要根据最重要的属性进行匹配,并且不同对象的属性不同
到目前为止,我可以成功地将对象展平为dict,然后进行简单的字典比较。然而,这是非常丑陋的,我怀疑是缓慢的:
findOrder(d, signal='CO', contractSymbol=1)
class emptyObj(object):
def __init__(self, a, b):
self.Symbol = a
self.Order = b
s = emptyObj(a=1, b=2)
class toObj(object):
def __init__(self, d): [setattr(self, a, b) for a, b in d.items()]
def findOrder(d, **kwargs):
def flatten(di):
ls = []
for o in di:
e = {}
for k, v in o.__dict__.items():
if isinstance(v, (int, float, str, tuple, list, dict)):
e[k] = v
else:
for attr, val in v.__dict__.items(): e[str(k)+str(attr)] = val
ls.append(e)
return ls
g = flatten(d)
l = [k for k in g if kwargs.items() <= k.items()]
if l: return l
d = [toObj({'id':1250, 'signal': 'CO', 'contract': s}),
toObj({'id':1252, 'signal': 'LO', 'contract': s})]
print(findOrder(d, signal='CO'))
有没有一种更为优化和直接的方法来实现这一点
如果试图按属性筛选对象,请使用
filter
或列表理解,并使用检查属性的函数:然后过滤对象:
或者
相关问题 更多 >
编程相关推荐