假设我有一个像这样的数据结构(对象列表):
[
<--
Name: Bob
Job: Programmer
Location: Salem
-->,
<--
Name: Steve
Job: Sales
Location: New York
-->,
<--
Name: Jeff
Job: Programmer
Location: New York
-->
]
现在假设我有一个 Web 表单,它将返回一个字典,其中每个键都引用对象中的一个字段。例如,假设我像这样取回一本字典:
{"Name": [""], "Job": ["Programmer"], "Location": ["Salem", "New York"]}
这是为了返回塞勒姆和纽约地点的所有程序员:Bob 和 Jeff。它始终是字符串列表的字典。我只是想检查对象的字符串值是否包含该字符串。
问题在于迭代字典的每个条目并确保每个对象匹配字典的所有规范。 这是我当前的代码,它在逻辑上仅创建一个对象列表,其中包含任何包含任何参数的对象,这不是我想要的:
return_list = []
filter_dictionary = dict(request.form)
for row in data:
for key, value in filter_dictionary.iteritems():
for obj in value:
if obj in str(getattr(row, key)):
return_list.append(row)
return return_list
我确信一定有一种更聪明、更好的方法来做到这一点,也许是涉及集合的东西。我该怎么做呢?
返回值最终应该是一个对象列表,如原始示例所示,但仅包含满足filter_dictionary
所有规范的对象
最佳答案
其他人可能会提供更简洁的解决方案,但我认为对现有代码最接近的调整如下:
return_list = []
filter_dictionary = dict(request.form)
for row in data:
match = True # we set to False if any attribute doesn't match
for key, value in filter_dictionary.items():
attrmatch = False # we need at least one match per attribute
for obj in value:
if obj in str(getattr(row, key)): attrmatch = True
if not attrmatch: match = False
if match: return_list.append(row)
关于python - 使用字典来过滤对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20787428/