动态列表创建和附加值 - python

Dynamic list creation and append values - python

我有一个从 json 解析的输入数据,并从表名、列名、列长度

等键打印输出
data = ('tablename', 'abc.xyz'),('tablename','abc.xyz'),('columnname', 'xxx'),('columnname', 'yyy'),('columnlen', 55)

data[0] = 
abc.xyz
abc.xyz
abc.xyz

data[1] =
xxx
yyy
zzz

data[2] = 
20
30
60

数据[0]表示表名

数据[1]表示列名

data[2]代表列长度

我有下面的代码可以手动创建空列表

TableName_list = []
ColumnName_list = [] 
ColumnLen_list = []

for x in data:
    if x[0] == 'tablename':
        TableName_list.append(data[0]])
    elif x[0] == 'columnname':
        ColumnName_list.append(data[1])
    elif x[0] == 'columnlen':
        ColumnLen_list.append(data[2])

我需要为每个字段(表名、列、列长度)分别创建一个动态空列表,并将数据附加到字典中的空列表中

我的输出在字典中是这样的

dict =  {'TableName':TableName_list,'ColumnName':ColumnName_list,'ColumnLen':columnLength_list }

我建议直接做字典,大概是这样的:

out_dict = {}
for x in data:
  key = x[0]
  if key in out_dict.keys():
    out_dict[key] = out_dict[key].append(x[1])
  else:
    out_dict[key] = [x[1]]

这可能最容易用 defaultdict:

from collections import defaultdict
dd = defaultdict(list)

data = [
    ('tablename', 'abc.xyz'),('tablename','abc.xyz'),
    ('columnname', 'xxx'),('columnname', 'yyy'),
    ('columnlen', 55),('columnlen', 30)
]
for d in data:
    dd[d[0]].append(d[1])

输出:

defaultdict(<class 'list'>, {
    'tablename': ['abc.xyz', 'abc.xyz'],
    'columnname': ['xxx', 'yyy'],
    'columnlen': [55, 30]
})

如果结果中名称的大小写很重要,您可以使用字典来翻译传入的名称:

aliases = { 'tablename' : 'TableName', 'columnname' : 'ColumnName', 'columnlen' : 'ColumnLen' }
for d in data:
    dd[aliases[d[0]]].append(d[1])

输出:

defaultdict(<class 'list'>, {
    'TableName': ['abc.xyz', 'abc.xyz'],
    'ColumnName': ['xxx', 'yyy'], 
    'ColumnLen': [55, 30]
})

使用 pandas:

import pandas as pd

>>> pd.DataFrame(data).groupby(0)[1].apply(list).to_dict()
'''
{'columnlen': [55, 30],
 'columnname': ['xxx', 'yyy'],
 'tablename': ['abc.xyz', 'abc.xyz']}