首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python3和SQLlite存储字典数据

使用Python3和SQLlite存储字典数据
EN

Stack Overflow用户
提问于 2018-08-18 12:42:09
回答 1查看 25关注 0票数 0

下面是我的代码:

代码语言:javascript
复制
def getDownloaders(dbPATH):
 with sqlite3.connect(dbPATH) as db:
      cursor = db.cursor()
      cursor.execute("SELECT * FROM Downloaders")
      d = cursor.fetchall()

      downloader = {}
      column_names = [s[0] for s in cursor.description]

      for i in range(len(d)):
        for row in d:
            downloader[i] = dict(zip(column_names, row))

 print(downloader)
 return downloader  

以下是我的数据:

代码语言:javascript
复制
[{1, 'lll', ‘lll', 'lll', '', ‘1’,  'lobio', 'c:/'},
{2, 'test', ‘test3', 'blob', 'blah', ‘1’,  'lio', 'c:/'},
{3, 'ledere', ‘copsssss', 'reds', 'server', ‘0’,  'lobio', 'c:/'}]

这是我想要的字典

代码语言:javascript
复制
{0: {'id': 1, 'Host': 'lll', 'username': 'lll', 'password': 'lll', 'label': 'lll', 'Enabled': 1, 'name': 'lobio', 'file': 'c:/'}, 1: {'id': 2,'Host': 'test', 'username': 'test3', 'password': 'blob', 'label': 'blah', 'Enabled': 1, 'name': 'lio', 'file': 'c:/'}, 2: {'id': 3, 'Host': 'lwderel', 'username': ‘copsssss', 'password': 'reds', 'label': 'server', 'Enabled': 0, 'name': 'lobio', 'file': 'c:/'}}
EN

回答 1

Stack Overflow用户

发布于 2018-08-18 18:26:45

您有两个嵌套的for循环,分别用于所有行索引和所有行,因此最内侧的一行可以看到irow (3×3)的所有组合,即使这两个不匹配的组合也是如此。

您必须使用单个循环:

代码语言:javascript
复制
cursor.execute("...")
column_names = [s[0] for s in cursor.description]
downloader = {}
i = 0
for row in cursor:
  downloader[i] = dict(zip(column_names, row))
  i += 1

使用连续数字作为键的字典是没有意义的;使用数组作为返回值会更简单:

代码语言:javascript
复制
cursor.execute("...")
column_names = [s[0] for s in cursor.description]
downloader = [dict(zip(column_names, row)) for row in cursor]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51905324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档