在字典中同时追加键和值

append key and value in dictionary simultaneously

提问人:adss4 提问时间:11/16/2023 更新时间:11/16/2023 访问量:46

问:

我有一个标题和值列表,这些标题和值来自一个 Web 废弃的页面。但是一旦我把它传递给一个for循环,我就会得到一个非常大的列表。在代码中,我正在迭代标题和 Web 元素并将它们存储在列表中,不知道为什么

header = ['h1','h2'......'h60']
Webscrapped list, in code get values like below
row.find_elements(By.TAG_NAME, "td")[i].text -> something like this values [1,2.........5]

here i got 'i' till 60 where the headers is also till 60, so i pass the same 'i' value for key and value parsing

预期大小:实际的网页表大小为 [60 列 * 9 行] 但我得到 pandas 数据帧 [60 列 * 580+ 行]

我尝试过的代码

value_list = []

header_list = ['h1','h2','h3',.......,'h60']

for i in range(0,len(header_list)):
    for row in table_trs:
        value_list.append({
            header_list[i]:row.find_elements(By.TAG_NAME, "td")[i].text
        })
df = pd.DataFrame(value_list)
python pandas selenium-web驱动程序

评论


答:

1赞 Anentropic 11/16/2023 #1

我想你的意思是这样做:

value_list = []

header_list = ['h1','h2','h3',.......,'h60']

for row in table_trs:
    value_list.append({
        header: row.find_elements(By.TAG_NAME, "td")[i].text
        for i, header in enumerate(header_list)
    })
df = pd.DataFrame(value_list)

即,中的每个元素都应该是一个完整的字典,表示表中的一行value_list

而在原始代码中,您为每列每行制作了一个字典

我想你也可以这样做:

value_list = []

header_list = ['h1','h2','h3',.......,'h60']

for row in table_trs:
    value_list.append([
        row.find_elements(By.TAG_NAME, "td")[i].text
        for i in range(0, len(header_list))
    ])

df = pd.DataFrame(value_list, columns=header_list)

以避免每一行都重复标题(如果您要构建很多行,则效率更高)

评论

0赞 adss4 11/16/2023
“列出索引超出范围”,它为两个代码显示此错误
0赞 adss4 11/16/2023
row.find_elements(By.TAG_NAME, “td”)[i] 这里的 i 是所有人的不同值,例如:如果 i -> 2,则值为 [100, 200, 300...]
1赞 Anentropic 11/16/2023
您的原始代码也会有同样的问题。听起来有一个少于标头的标头row<td>
0赞 adss4 11/16/2023
你是对的,行小于 TD,现在它就像一个魅力,谢谢