【问题标题】:Why am I unable to create additional keys in this nested dictionary?为什么我无法在此嵌套字典中创建其他键?
【发布时间】:2019-12-01 21:07:58
【问题描述】:

我有一个包含以下列的 SQL 表:公司、产品、别名。

我需要只使用一个 SQL 执行查询从这个表中创建一个数据集。

公司栏有重复,我只需要为每个公司提供一本字典。每个公司都有自己的产品——公司字典中的每个产品都需要它自己的字典。每个公司和产品组合都有自己的别名。别名应位于最深层次词典中的列表内:公司字典>产品字典>别名列表

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 表中的最后一个产品被添加到公司字典中。我需要能够在 SQL 表中添加公司拥有的所有产品,并且只添加公司拥有的那些产品。

【问题讨论】:

    标签: python sql python-2.7 dictionary


    【解决方案1】:

    您不断覆盖您创建的字典。你需要稍微改变你的结构并添加代码来首先检查公司是否已经被添加到字典中:

    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()
    

    【讨论】:

      猜你喜欢
      • 2018-03-27
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      相关资源
      最近更新 更多