列表中有很多字典VS词典中有很少列表?

发布于 2021-01-29 15:27:47

我正在像这样的数据集做一些练习:

列出许多字典

users = [
    {"id": 0, "name": "Ashley"},
    {"id": 1, "name": "Ben"},
    {"id": 2, "name": "Conrad"},
    {"id": 3, "name": "Doug"},
    {"id": 4, "name": "Evin"},
    {"id": 5, "name": "Florian"},
    {"id": 6, "name": "Gerald"}
]

字典很少

users2 = {
    "id": [0, 1, 2, 3, 4, 5, 6],
    "name": ["Ashley", "Ben", "Conrad", "Doug","Evin", "Florian", "Gerald"]
}

熊猫数据框

import pandas as pd
pd_users = pd.DataFrame(users)
pd_users2 = pd.DataFrame(users2)
print pd_users == pd_users2

问题:

  1. 我应该像用户还是像user2来构造数据集?
  2. 有性能差异吗?
  3. 一个比另一个更具可读性吗?
  4. 有没有我应该遵循的标准?
  5. 我通常将它们转换为pandas数据框。当我这样做时,两个版本都是相同的…对吗?
  6. 每个元素的输出都是正确的,所以我是否可以使用panda df的对不重要?
关注者
0
被浏览
274
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这涉及面向列的数据库与面向行的数据库。您的第一个示例是面向行的数据结构,第二个示例是面向列。在Python的特定情况下,使用slot可以使前者的效率显着提高,从而不必为每一行重复列的字典。

    哪种形式效果更好,很大程度上取决于您对数据的处理方式。例如,如果您只访问任何行的所有行,则面向行是自然的。同时,面向列可以更好地利用缓存,例如在按特定字段进行搜索时(在Python中,可以通过大量使用引用来减少这种情况;数组类型可以优化这种情况)。传统的面向行的数据库经常使用面向列的排序索引来加快查找速度,并且了解了这些技术之后,您可以使用键值存储实现任何组合。

    Pandas确实将两个示例都转换为相同格式,但是对于面向行的结构而言,转换本身的成本更高,这仅仅是因为必须阅读每个单独的字典。所有这些成本可能都是微不足道的。

    第三个选项在您的示例中不明显:在这种情况下,您只有两列,其中一列是从0连续的整数ID。可以按条目本身的顺序存储,这意味着整个结构会在您呼叫的列表中找到users2['name'];
    但值得注意的是,没有位置的条目是不完整的。该列表使用enumerate()转换为行。数据库通常也有这种特殊情况(例如,sqlite
    rowid)。

    通常,从使代码保持敏感的数据结构开始,并且仅在知道用例并且存在可衡量的性能问题时进行优化。诸如Pandas之类的工具可能意味着大多数项目都可以正常运行而无需微调。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看