【问题标题】:How to filter an array of object in Python?如何在 Python 中过滤对象数组?
【发布时间】:2019-10-31 19:52:05
【问题描述】:

我有一个名为 project 的集合,这个集合包含不同的文档,每个文档都包含一个名为 data 的对象数组。

我希望能够通过 projectAlias 过滤数据(Excel 文件)并使用 pymongon 和 pandas 在 SQL 中构造这个文件(列和行)

例如

【问题讨论】:

  • 我会上传目前正在做的代码
  • 所以你想在mongo中过滤它? $match?
  • @Adrian 你想解释一下你在这里寻找什么样的答案吗?
  • @Dekel 我最后提出了一个新问题,因为我已经接近终点线了,我试图把一些东西拿出来:) 我在这里得到了答案:stackoverflow.com/a/61577290/4475605跨度>

标签: python pandas mongodb


【解决方案1】:

这里没有代码,所以我不得不做一些猜测:

  • 我假设您的所有数据都已经在它自己的数组中,从它最初进来的任何形式中提取。如果需要从多个文档中收集它,我假设已经完成了
  • 我假设每个对象都有一个带有字符串值的键“projectAlias”
  • 我假设所有没有“projectAlias”键的对象都已处理
  • 出于懒惰,我假设您希望按字典顺序对数据进行排序(例如“a”

这样的东西可能有用:

#Made up function for first and third assumptions
data_array = collect_data(documents)
data_array.sort(key=lambda obj: obj["projectAlias"])

#Or, to create a new array with sorted data
sorted_data = sorted(data_array, key=lambda obj: obj["projectAlias"])

python 内置排序函数的关键 arg 采用某种其他函数,并在对该数组的结果进行排序之前在数组的每个元素上运行它。然后因为 python 很有帮助,它预先定义了用于排序的字符串比较,将大写字母放在首位,然后是英文字母的小写字母。当您进入口音、变音符号和其他变体时,情况就会发生变化。我对此一无所知。

如果您的数据需要其他排序,您可能需要为 key 定义一个不同的 lambda 函数,以产生更适合您所需排序的输出。另一个可能是值的长度:

#Made up function for first and third assumptions
data_array = collect_data(documents)
data_array.sort(key=lambda obj: len(obj["projectAlias"]))

#Or, to create a new array with sorted data
sorted_data = sorted(data_array, key=lambda obj: len(obj["projectAlias"]))

如果您想了解更多信息,python.org 的 wiki 中的“关键功能”部分 here 可能会有用

【讨论】:

    【解决方案2】:

    由于这个问题看起来很笼统,我将建议使用聚合管道方法

    { $filter: { input: <array>, as: <string>, cond: <expression> } }
    

    更多详情请访问https://docs.mongodb.com/manual/reference/operator/aggregation/filter/

    【讨论】:

      猜你喜欢
      • 2020-08-17
      • 2021-04-23
      • 2022-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-17
      • 2018-11-22
      • 2020-07-03
      相关资源
      最近更新 更多