【问题标题】:Python - Generator object into a list of listsPython - 将生成器对象放入列表列表
【发布时间】:2021-02-25 03:04:55
【问题描述】:

我有一个生成器对象“结果”,它在循环时会返回一个字典列表。我正在尝试将其转换为列表列表,因此我可以轻松地循环并引用要插入到数据库中的每个值。我相信我遇到了麻烦,因为这是一个生成器对象,我该怎么做?

如:

def parse(results):
    for r in results:
        print(r)

结果:

[{'id': '7229957054', 'repost_of': None, 'name': '1996 Acura Integra', 'url': 'https://monterey.craigslist.org/cto/d/salinas-1996-acura-integra/7229957054.html', 'datetime': '2020-11-12 14:37', 'last_updated': '2020-11-12 14:37', 'price': '$1,000', 'where': 'Salinas', 'has_image': True, 'geotag': None, 'deleted': False}, {'id': '7229839309', 'repost_of': None, 'name': '1990 Acura Integra GS', 'url': 'https://monterey.craigslist.org/cto/d/salinas-1990-acura-integra-gs/7229839309.html', 'datetime': '2020-11-12 11:31', 'last_updated': '2020-11-12 11:31', 'price': '$2,800', 'where': 'Salinas, Ca', 'has_image': True, 'geotag': None, 'deleted': False}]

我的代码:

def initialParse(results):
    rList = []
    for r in results:
        r_id = str(r['id'])
        r_name = str(r['name'])
        r_url = str(r['url'])
        r_datetime = str(r['datetime'])
        r_updated = str(r['last_updated'])
        r_price = str(r['price'])
        r_where = str(r['where'])
        iList = list(r_id + r_name + r_url + r_datetime + r_updated + r_price + r_where)
        rList.append(iList)
    print(rList)

返回:

[['7', '2', '2', '9', '9', '5', '7', '0', '5', '4', '1', '9', '9', '6', ' ', 'A', 'c', 'u', 'r', 'a', ' ', 'I', 'n', 't', 'e', 'g', 'r', 'a', 'h', 't', 't', 'p', 's', ':', '/', '/', 'm', 'o', 'n', 't', 'e', 'r', 'e', 'y', '.', 'c', 'r', 'a', 'i', 'g', 's', 'l', 'i', 's', 't', '.', 'o', 'r', 'g', '/', 'c', 't', 'o', '/', 'd', '/', 's', 'a', 'l', 'i', 'n', 'a', 's', '-', '1', '9', '9', '6', '-', 'a', 'c', 'u', 'r', 'a', '-', 'i', 'n', 't', 'e', 'g', 'r', 'a', '/', '7', '2', '2', '9', '9', '5', '7', '0', '5', '4', '.', 'h', 't', 'm', 'l', '2', '0', '2', '0', '-', '1', '1', '-', '1', '2', ' ', '1', '4', ':', '3', '7', '2', '0', '2', '0', '-', '1', '1', '-', '1'...]

将 rList.append() 移出一个块会在包含所有条目的列表中给出一个列表...我需要列表中的每个结果 r 在它自己的列表中...像这样:

[['id', 'name', 'url', 'datetime', 'lastupdated', 'price', 'where'], ['id', 'name', 'url', 'datetime', 'lastupdated', 'price', 'where'], ... ]

我在这里做错了什么?

【问题讨论】:

  • 问题是 iList = list(r_id + r_name + r_url + r_datetime + r_updated + r_price + r_where)。 iList 的更改 = [r_id + r_name + r_url + r_datetime + r_updated + r_price + r_where]

标签: python python-3.x list dictionary generator


【解决方案1】:

看起来你正试图得到这个:

[list(r.keys()) for r in results]

话虽如此,可能有更好的方法来做你正在做的事情;你能解释一下你打算如何插入这些物品吗?还是您想要列表中的值:

[list(r.values()) for r in results]

但实际上,您似乎在这里处理结构化数据,这意味着您应该将其添加到 pandas 数据框中并根据需要过滤行或选择列。您需要做的就是:

import pandas as pd
df = pd.DataFrame(results)

您可以阅读 pandas 文档以了解如何对数据进行操作并获取您想要的表格。它还会使最终加载到您的 SQL 数据库中变得更加容易。

【讨论】:

  • 感谢您的建议,一旦我将数据转换为我知道如何管理的对象/格式,我计划使用 pyodbc 和循环遍历每个内部列表。最终目标是将这些值中的每一个插入到表中的单独列中……例如,每个列表中的每个值都有一个单独的列。
  • 是的,我想要列表中的值...不太关心键。
  • 虽然您的解决方案确实有效 - 我不希望结果字典中包含每个值......只有其中一些......这就是为什么我试图指定每个我想要。但我想我可以在事后从列表列表中拉出我想要的那些。谢谢! @teepee
  • 如果你想过滤数据,你不妨把所有的东西都放到一个 pandas 数据框中,然后从那里过滤。添加了描述它的编辑。
  • 很酷,谢谢-我会研究熊猫,从未使用过,但我一直听说它。我可以用我的“hack and slash”编码风格来完成大多数事情......将我知道如何一起做的事情用胶带粘成一个大杂乱的杰作......但总有更好更有效的方法......你们总是提醒我这一点。再次感谢!
【解决方案2】:

替换

iList = list(r_id + r_name ...)

iList = [r_id, r_name, ...]

r_id + r_name ... 通过连接所有参数创建一个大字符串,list() 函数创建字符串中所有字符的列表。你不想这样。

【讨论】:

  • 我实际上尝试过,虽然它更接近我想要的,但它不会将值分隔到它们自己的列表项中......它会创建一个包含连接在一起的值列表的大列表,喜欢this: [['id name url date updated price where'], [...]] 而不是 [['id', 'name', 'url', ...
  • 不知道为什么它不适合你。我得到以下输出:[['2', 'kartik'], ['10', 'kartikSecond']]。不要添加字符串(将它们连接在一起)。
  • 因为我的输入是一个生成器。你的可能只是一个包含字典的列表......对吗?
  • 当我删除 ''s 时,我得到一个 keyerror,当我删除 str() 时,我得到一个“无法添加 notype 到列表错误。多么痛苦!
  • 我的意思是你应该使用 str() 和 ''s 来提取相应的值。但是当您从提取的字符串创建 iList 时,不要添加字符串。只需将字符串写在用逗号分隔的方括号内(iList = [r_id, r_name ...])。是的,我使用的是带有字典的列表而不是生成器,但我认为这一步是在您提取字符串之后。在这个阶段,顶层结构是字典列表还是生成器应该没有区别
猜你喜欢
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 2014-10-15
相关资源
最近更新 更多