python-3.x 通过从SQL提取数据创建字典,未正确提取值(列表

5rgfhyps  于 2023-01-10  发布在  Python
关注(0)|答案(1)|浏览(101)

我想用从数据库中提取的值创建一个字典。然后创建键和值。它似乎做的一切权利,除了最后一个值,这是一个小的数字列表,如[0, 1, 1, 5]。SQL代码是正确的。这是一个Python代码的问题
我想建立这样的字典,例如或类似的东西:

{'Minnesota-Dallas': ['NHL', 8.1, 9, '15:00', [0, 1, 1, 5],

但问题是它们没有提取列表中的所有值,而只提取了一个值,例如得到以下内容:

{'Minnesota-Dallas': ['NHL', 8.1, 9, '15:00', 5]

如您所见,5被提取,但没有0、1、1、5。
从数据库中提取的项是row[0]作为键,然后值是row[1], row[2], row[3], row[4], row[5]。我遇到麻烦的值(应该提取[0,1,1,5]的值)是row[5]。谢谢!
我试了这个代码:

x = cursor_test.execute('''SELECT Next.team_home||"-"||Next.team_away,
                                            Next.championship, Next.date, Next.current_round, Next.clock,
                                            Results.score_home
                                     FROM Next
                                     INNER JOIN Results
                                     ON Next.team_home = Results.team_home;''')

    test = {}
    for row in x.fetchall():
         test[row[0]] = [row[i] for i in range(1, 6)]

环路内的print(row)显示:

('Minnesota-Dallas', 'NHL', 8.1, 9, '15:00', 0) 
('Minnesota-Dallas', 'NHL', 8.1, 9, '15:00', 1) 
('Minnesota-Dallas', 'NHL', 8.1, 9, '15:00', 1) 
('Minnesota-Dallas', 'NHL', 8.1, 9, '15:00', 5)
...
dsekswqp

dsekswqp1#

因此,关于row的输出,您的表不包含记录

('Minnesota-Dallas', 'NHL', 8.1, 9, '15:00', [0, 1, 1, 5])

但是N条记录,对于N个值如果列表结束

('Minnesota-Dallas', 'NHL', 8.1, 9, '15:00', 0) 
('Minnesota-Dallas', 'NHL', 8.1, 9, '15:00', 1) 
('Minnesota-Dallas', 'NHL', 8.1, 9, '15:00', 1) 
('Minnesota-Dallas', 'NHL', 8.1, 9, '15:00', 5)

如果这不是您想要存储数据的格式,请修复该格式(您拥有的代码将正常工作)

如果您修复了格式,则会改进代码

test = {}
for row in x.fetchall():
    test[row[0]] = row[1:] # equivalent to row[1:6]

# or even better using unpacking
for key, *values in x.fetchall():
    test[key] = values

实际数据格式的解决方案

test = {}
for row in x.fetchall():
    if row[0] not in test:
        test[row[0]] = list(row[1:])
        test[row[0]][4] = [test[row[0]][4]]  # transform int to list of int
    else:
        test[row[0]][4].append(row[5])

相关问题