为什么我无法在此嵌套字典中创建其他键?

2024-10-01 07:35:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含以下列的SQL表:Firm、Product、Alias

我只需要使用一个SQL Execute查询就可以从这个表中创建一个数据集。

公司栏有两本,每个公司我只需要一本字典。每个公司都有自己的产品——公司词典中的每个产品都需要自己的词典。每个公司和产品组合都有自己的别名。别名应该位于最深层词典的列表中:Firm Dict>;产品目录>;别名列表

def test():
    d = {}
    cursor = conn.cursor(as_dict=True)

    cursor.execute('SELECT FirmName, InfoSysName, Alias, WhereAmI_UserId FROM WhereAmIFirmInfoSysMapping_v')
    for row in cursor:
        if row['FirmName'] != '*':
            d[row['FirmName']] = {}
            d[row['FirmName']][row['InfoSysName']] = []

    print d

    conn.close()

我可以返回一本看起来像这样的词典:

{u'FirmA': {u'ProductZ': []}, {u'FirmB': {u'ProductZ': []}, {u'FirmA': {u'ProductZ': []}

但是,您可以看到,只有SQL表中的最后一个产品被添加到Firm dictionary中。我需要能够在SQL表中添加公司的所有产品,并且只添加公司拥有的产品。


Tags: gt列表sql产品公司aliasconncursor
1条回答
网友
1楼 · 发布于 2024-10-01 07:35:04

你一直在重写你创建的字典。您需要稍微更改结构并添加代码,以首先检查公司是否已添加到字典中:

def test():
    d = {}
    cursor = conn.cursor(as_dict=True)

    cursor.execute('SELECT FirmName, InfoSysName, Alias, WhereAmI_UserId FROM WhereAmIFirmInfoSysMapping_v')
    for row in cursor:
        if row['FirmName'] != '*':
            if row['FirmName'] not in d:
                d[row['FirmName']] = {}
            d[row['FirmName']][row['InfoSysName']] = []

    print d

    conn.close()

相关问题 更多 >