簡體   English   中英

Python - 生成器 object 轉化為列表列表

[英]Python - Generator object into a list of lists

我有一個生成器 object 'results',它在循環時返回一個字典列表。 我正在嘗試將其轉換為列表列表,因此我可以輕松地遍歷並引用要插入到數據庫中的每個值。 我相信我遇到了麻煩,因為這是一個發電機 object,我該怎么做?

如:

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'], ... ]

我在這里做錯了什么?

看起來你正試圖得到這個:

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

話雖這么說,可能有更好的方法來做你正在做的事情; 你能解釋一下你打算如何插入這些項目嗎? 或者你想要列表中的值:

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

但實際上,看起來您正在處理這里的結構化數據,這意味着您應該將其添加到 pandas dataframe 並根據需要過濾行或選擇列。 您需要做的就是:

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

您可以閱讀 pandas 文檔,了解如何對數據進行操作並獲取您想要的表格。 它還將使最終加載到您的 SQL 數據庫變得更加容易。

代替

iList = list(r_id + r_name ...)

iList = [r_id, r_name, ...]

r_id + r_name...通過連接所有 arguments 創建一個大字符串, list() function 創建字符串中所有字符的列表。 你不想要那個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM