Python:将 SELECT 查询列表转换为字典

TMo*_*aes 0 python sql postgresql dictionary

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

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 
Run Code Online (Sandbox Code Playgroud)

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

重复的例子:

Id - 132 | Name: New York
Id - 24 | Name: NEW York
Run Code Online (Sandbox Code Playgroud)

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

'New York': { 
'id-1': 132,
'id-2': 24 }
Run Code Online (Sandbox Code Playgroud)

打印(行[0])

(338, u'')
None
Run Code Online (Sandbox Code Playgroud)

更新:输出(稍微改变行):

<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]),
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 5

在查询中使用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(',')]
Run Code Online (Sandbox Code Playgroud)

这会将代码放在列表中,而不是字典中,这可能比组成字典键(如 、 等)更好id-1,id-2例如

'New York': [132, 24]
Run Code Online (Sandbox Code Playgroud)