My SQL (sqlite3) 查询是这样的:
SELECT id, name FROM mytable;
这会返回大量行。我想根据这些结果创建一个字典,我可以在其中查找给定 id 的名称。
我发现的其他答案似乎是根据 SQL 结果创建字典,但它们使用列标签作为键 - 我对此不感兴趣。
示例表:
id | name
------+--------
foo | bar
baz | foobar
所需的字典:
{
'foo': 'bar',
'baz': 'foobar'
}
最佳答案
您可以循环遍历行(result cursor is iterable)、unpack键和值,然后使用 dict comprehension 组合结果:
desired_dict = {k:v for k, v in c.execute('SELECT id, name FROM MyTable')}
我喜欢使用字典推导式,因为我可以在添加到字典之前对结果进行额外的处理(例如更改大小写、转换为十进制或日期时间等)。
也就是说,如果您想直接访问字典,ozgur 有更短、更快的方法,即调用 dict()直接:
desired_dict = dict(c.execute('SELECT id, name FROM MyTable'))
这是一个实际的示例 session ,演示了该过程的开始到结束:
>>> import sqlite3
>>> c = sqlite3.connect('tmp.db')
>>> c.execute('CREATE TABLE MyTable (id text, name text)')
<sqlite3.Cursor object at 0x106227f80>
>>> c.execute("INSERT INTO MyTable VALUES ('abc', 'Alpha')")
<sqlite3.Cursor object at 0x106283810>
>>> c.execute("INSERT INTO MyTable VALUES ('def', 'Beta')")
<sqlite3.Cursor object at 0x106227f80>
>>> c.execute("INSERT INTO MyTable VALUES ('ghi', 'Gamma')")
<sqlite3.Cursor object at 0x106283810>
>>> c.commit()
>>> c.close()
>>>
>>> c = sqlite3.connect('tmp.db')
>>> {k:v for k, v in c.execute('SELECT id, name FROM MyTable')}
{'ghi': 'Gamma', 'def': 'Beta', 'abc': 'Alpha'}
关于python - 如何从 k :v tuples returned from a SQL query? 列表创建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39323623/