尝试转换为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]),
答案 0 :(得分: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-1
,id-2
等字典键更好,例如
'New York': [132, 24]
答案 1 :(得分:1)
dict需要一个元组列表。所以你只需要提供rows
变量
cities= dict(rows)
来自pythons文档:
dict()构造函数直接从键值对序列
构建字典
以下是一个例子:
>>> rows = [(1,"12"), (2,"abc"), (3,"random")]
>>> dict(rows)
{1: '12', 2: 'abc', 3: 'random'}