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

时间:2017-12-26 20:24:29

标签: python sql postgresql dictionary

尝试转换为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]),

2 个答案:

答案 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-1id-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'}