Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从一组对(列名、值)和0(如果找不到)填充表-Python和sqlite3_Python_Dictionary_Sqlite - Fatal编程技术网

从一组对(列名、值)和0(如果找不到)填充表-Python和sqlite3

从一组对(列名、值)和0(如果找不到)填充表-Python和sqlite3,python,dictionary,sqlite,Python,Dictionary,Sqlite,我有一个dict,其中包含一个itemID作为键,然后是一组像这样的对: (91311703, [(3300, 2), (3301, 3), (3327, 3), (3330, 2), (3386, 2), (3392, 2), (3 402, 3), (3413, 3), (3426, 3), (3449, 3)]) 每对中的第一个数字是唯一的ID号,第二个数字是1-5之间的值。我想使用sqlite3将其写入一个表,以便在本例中,有一行的itemID为91311703,然后3300列中的值为

我有一个dict,其中包含一个itemID作为键,然后是一组像这样的对:

(91311703, [(3300, 2), (3301, 3), (3327, 3), (3330, 2), (3386, 2), (3392, 2), (3
402, 3), (3413, 3), (3426, 3), (3449, 3)])
每对中的第一个数字是唯一的ID号,第二个数字是1-5之间的值。我想使用sqlite3将其写入一个表,以便在本例中,有一行的itemID为91311703,然后3300列中的值为2,3301列中的值为3,3327列中的值为3,以此类推

扭曲之处在于,表中的每一个可能的ID号都有列,总共大约有200-300个。如果我传递的dict不包含ID号,我希望它为该列输入一个0,因此在本例中,列3302-3326、3328、3329、3331-3385等都将获得一个值0

我考虑过的一种可能性是创建这个表,每个列的默认值为0,然后当我传入dict时,它只会更新它包含的ID number列的值。不过,这似乎是一种编码糟糕的方法,所以我愿意接受建议。另一个选项是某种类型的
if
else
,表示如果在dict中找到ID号,则使用其对中的值,否则使用0,但这似乎也不是一种很好的方法


我需要什么Python+sqlite3代码来查看这个dict,并将值分配给与这个dict中成对的ID号匹配的列?对于在dict中找不到ID号的列,您有什么建议将0分配给这些列?我的目标是每个itemID有一行(即在我的dict中每个键有一行)。

您可以动态更改SQL,只设置实际需要的列:

插入MyTable(itemID、col3300、col3301、col3327、col3330等)
数值(91311703,2,3,3,2,…)
或者对所有列使用命令,并将未使用的列设置为
0

插入MyTable(itemID、col3300、col3301、col3302、col3303等)
值(91311703,2,3,0,0,…)

但是,如果存在许多未使用的值,则此表结构将效率低下

正确规范化后,您将拥有一个只有三列的表,其中包含项目ID、ID和值的所有有效组合:

插入MyTable(itemID、ID、值)
数值(91311703,3300,2),
(91311703, 3301, 3),
(91311703, 3327, 3),
(91311703, 3330, 2),
...


以下哪种组织更适合您,取决于您希望运行哪种查询。

您可以动态更改SQL,只设置实际需要的列:

插入MyTable(itemID、col3300、col3301、col3327、col3330等)
数值(91311703,2,3,3,2,…)
或者对所有列使用命令,并将未使用的列设置为
0

插入MyTable(itemID、col3300、col3301、col3302、col3303等)
值(91311703,2,3,0,0,…)

但是,如果存在许多未使用的值,则此表结构将效率低下

正确规范化后,您将拥有一个只有三列的表,其中包含项目ID、ID和值的所有有效组合:

插入MyTable(itemID、ID、值)
数值(91311703,3300,2),
(91311703, 3301, 3),
(91311703, 3327, 3),
(91311703, 3330, 2),
...


这些组织中哪一个更适合您取决于您希望运行的查询类型。

为什么有这么多列?对我来说,这闻起来像是糟糕的数据库设计。mgilson-你说得对,我遗漏了一些东西,这是一个以itemID号为键的dict,然后是一个列表-更新了帖子以反映这一点。Martijn Pieters——任何给定的itemID在其配对列表中都可以有0到所有可能的唯一ID,因此我认为这是一种可以容纳所有可能性的方式。我的目标是每个itemID一行。为什么有那么多列?对我来说,这闻起来像是糟糕的数据库设计。mgilson-你说得对,我遗漏了一些东西,这是一个以itemID号为键的dict,然后是一个列表-更新了帖子以反映这一点。Martijn Pieters——任何给定的itemID在其配对列表中都可以有0到所有可能的唯一ID,因此我认为这是一种可以容纳所有可能性的方式。我的目标是每个itemID一行。前两个选项之一是我所想的,但我需要将其自动化。我正在寻找实现自动化的代码。至于第三个选项,有itemID,ID,value——我也考虑过这一点,但它使人们阅读表格变得不那么方便。在前两种方法中,任何itemID的信息都在一行上,而在第三个选项中,任何itemID的信息分散在dict中该itemID的成对行上。两者都可以查询,但第三种方式对人类来说不太方便。无论如何,upvote是因为它列出了一些选项,但我一直在寻找解决这些选项的方法。例如,我需要什么代码从ID中读取列名并将关联值放入以itemID开头的新行中?我之前已经搞乱了第三个选项,我想我知道如何编码它,但是我如何编码前两个选项中的一个呢?评论不是提问的正确地方;编辑你的问题。当你写“sqlite3代码”的时候,你真的是指“Python代码”吗?对不起,我想我在我的问题中已经问过这个问题了。问题已经是“我需要什么样的sqlite3代码来查看这个dict并为匹配这个dict中成对ID号的列赋值?”我将把它编辑为“什么Python+sqlite3代码…”以避免混淆。前两个选项之一就是我所想的