python - 使用字典来过滤对象列表

标签 python python-2.7 flask

假设我有一个像这样的数据结构(对象列表):

[
 <--
    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/

相关文章:

python - xlwings 函数查找最后一行数据

javascript - 将 Nuxt 前端与 Flask 后端集成的最佳方法

python - 如何使用 Flask 从服务器删除文件

python - 递归地将python对象图转换为字典

python - 如何在 Python 中只查找总 RAM

python - 如何在 Ubuntu 11.10 Oneiric 中正确安装 python-numpy

css - 如果元素属性动态变化,我们如何提取元素值

python - 尝试在 docker 容器中访问我的 Flask 应用程序时出现套接字挂断错误

python - Pandas 数据帧 : Efficiently find next value in one column where another column has a greater value

python - Python 中统计模型中的 ADF 测试