Python:将SELECT查询列表转换为dict

问题描述 投票:0回答:2

尝试转换为dict此SELECT查询,因为我有重复的名称。

def getcity():
 conn = databaseConnection()
 cur = conn.cursor()
 conn.set_client_encoding('LATIN1')
 cur.execute("SELECT codcity, name FROM cities")
 rows = cur.fetchall()
 cities= [dict(row) for row in rows]  
 return cities 

结果:TypeError: cannot convert dictionary update sequence element #0 to a sequence

重复的例子:

Id - 132 | Name: New York
Id - 24 | Name: NEW York

我不确定,但使用dict,是处理重复案例的最佳方法。我想要的最终结果:

'New York': { 
'id-1': 132,
'id-2': 24 }

打印(行[0])

(338, u'')
None

更新:输出(略有改动的行):

<type 'list'>
[(u'Jam', [314]),
 (u'Arthur Cat', [527]),
 (u'Bel', [406]),
 (u'Bel of Taq', [415]),
 (u'Good Luck', [420]),
 (u'GOOD LUCK', [467]),
 (u'Bc do Toto', [407]),
 (u'Caera', [322]),
 (u'Caira S\xe3o George', [506]),
 (u'Grand Good', [373]),
python sql postgresql dictionary
2个回答
3
投票

在查询中使用GROUP_CONCAT将城市的所有代码一起作为逗号分隔的字符串,然后在Python中将其拆分以创建列表。

 cur.execute("SELECT name, ARRAY_AGG(codcity) FROM cities GROUP BY name")
 rows = cur.fetchall()
 cities = {}
 for row in rows:
    cities[row[0]] = [int(code) for code in row[1].split(',')]

这将把代码放在一个列表中,而不是字典中,这可能比编写像id-1id-2等字典键更好,例如

'New York': [132, 24]

1
投票

dict期望一个元组列表。所以你只需要提供rows变量

cities= dict(rows) 

来自蟒蛇文件:

dict()构造函数直接从键值对序列构建字典

这是一个例子:

>>> rows = [(1,"12"), (2,"abc"), (3,"random")]
>>> dict(rows)
{1: '12', 2: 'abc', 3: 'random'}
© www.soinside.com 2019 - 2024. All rights reserved.