【问题标题】:Getting unpredictable data into a tabular format将不可预测的数据转换为表格格式
【发布时间】:2017-03-23 02:33:06
【问题描述】:

情况:

我抓取的每个页面都有<input> 元素,其中包含title=value=

我不知道页面上会出现什么。

我希望将所有收集到的数据放在最后一个表中,每个标题对应一列。

所以基本上,我需要每一行数据与所有其他数据对齐,如果一行没有某个​​元素,那么它应该是空白的(但必须有一些东西来保持对齐)。

例如。

首页有:{animal: cat, colour: blue, fruit: lemon, day: monday}

第二页有:{animal: fish, colour: green, day: saturday}

第三页有:{animal: dog, number: 10, colour: yellow, fruit: mango, day: tuesday}

那么我的结果表应该是:

animal | number | colour | fruit | day
cat    | none   | blue   | lemon | monday
fish   | none   | green  | none  | saturday
dog    | 10     | yellow | mango | tuesday

虽然保持title value 对的顺序会很好,但我知道字典不会这样做。

所以基本上,我需要从所有titles 中生成列(按顺序排列,但以某种方式合并在一起)

在不知道所有可能的标题并明确指定要输入的值的顺序的情况下,最好的方法是什么?

【问题讨论】:

    标签: python tabular


    【解决方案1】:

    您需要一个多通道算法。记住字典列表中的所有抓取页面。在第一遍中,遍历这个列表并收集 set() 中的所有标题,并创建一个排序(例如,转换为列表按字母顺序排序)。

    在第二遍中,您打印表格并将生成的排序用作列名,根据需要从字典中提取值(默认为空以处理缺失值),例如使用 dict.get(name, "") .

    【讨论】:

    • 啊太棒了,设置声音真的很有用。尽管此方法不会保留 title/value 对出现在页面上的顺序。你怎么能这样?
    • 您可以在这里查看答案:stackoverflow.com/questions/1653970/… 用于有序集的实现。此外,从 Python 2.7/3.1 开始,标准库中有一个 OrderedDict:docs.python.org/dev/library/…
    • 我读了一遍。这些值在每一页中是否以相同的顺序出现?即便如此,也很难重建秩序。您必须保留一个带有顺序(或有序集)的额外列表,并根据其周围的键确定在何处插入新键。
    • 它们之间的关系将始终保持相同的顺序,但某些页面会缺少值或具有额外的值。
    【解决方案2】:

    我建议您可以使用可选参数,或者使用重载的构造函数来填充值:

    Page(string animal = string.empty, 
    int number = -999, string colour = string.empty, day = string.empty )
    

    或者将每个键/值对存储为类型对象,然后将其从您的页面中转换。

    【讨论】:

    • 这需要了解页面上可能显示的内容,但不是吗?
    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2023-02-14
    相关资源
    最近更新 更多