python - 如何从 k :v tuples returned from a SQL query? 列表创建字典

标签 python sql dictionary sqlite

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/

相关文章:

python - 读取数字作为输入时转换小数点

python - 如何设置python的默认库路径

python - 从 Pandas 到字典,第一列中的值将是键,第二列中的相应值将全部在列表中

Python:检查变量是否是字典

python - 在 python 中排序列表

python - 带参数的 Web2py Controller ?

mysql - 两列上的 SQL 内部联接

javascript - 当我添加新数组时, "A"不断添加到多维数组的开头。知道是什么原因造成的吗?

php - 如何重建没有重复和其他限制的数组?

arrays - 按某个键值对字典数组进行排序(Swift 3)