python如何将dict转成list

我有很多个dict,例如{A:A1,B:B2,C:C3,D:D4},{A:AA1,C:CC3,D:DD4,E:EE5},{A:AAA1,B:BBB2,C:CCC3,D:DDD4,E:EEE5}。
我想得到一个类似行列转置后的LIST,效果如下:[A,B,C,D,E],[A1,B2,C3,D4,NULL],[AA1,NULL,CC3,DD4,EE5],[AAA1,BBB2,CCC3,DDD4,EEE5]]
简单说明:
list是一个合集,如果确实Key的value用null补充
key作为一个list,value也是list,key和value的顺序要一致

阅读 32.8k
3 个回答

python3 pandas

>>> import pandas as pd
>>> data = [
    {'A': 'A1','B': 'B2','C': 'C3','D': 'D4'},
    {'A': 'AA1','C': 'CC3','D': 'DD4','E': 'EE5'},
    {'A': 'AAA1','B': 'BBB2','C': 'CCC3','D': 'DDD4','E': 'EEE5'}
]
>>> df=pd.DataFrame(data).fillna('null')
>>> ls=df.values.tolist()
>>> ls.insert(0,df.columns.tolist())
>>> ls
[['A', 'B', 'C', 'D', 'E'], ['A1', 'B2', 'C3', 'D4', 'null'], ['AA1', 'null', 'CC3', 'DD4', 'EE5'], ['AAA1', 'BBB2', 'CCC3', 'DDD4', 'EEE5']]
>>> 

这是针对一个dict

key = list(dict.keys())
value = list(dict.values())

如果有多个dict,比如
dict1{A:A1,B:B2,C:C3,D:D4}
dict2{A:AA1,C:CC3,D:DD4,E:EE5}
dict3{A:AAA1,B:BBB2,C:CCC3,D:DDD4,E:EEE5}

那么:

dict1 = {'A':'A1','B':'B2','C':'C3','D':'D4'}
dict2 = {'A':'AA1','C':'CC3','D':'DD4','E':'EE5'}
dict3 = {'A':'AAA1','B':'BBB2','C':'CCC3','D':'DDD4','E':'EEE5'}
key1 = list(dict1.keys())
key2 = list(dict2.keys())
key3 = list(dict3.keys())
keys = list(set(key1).union(set(key2), set(key3)))    # key取并集
result = [keys]
for dict in [dict1, dict2, dict3]:
    value = []
    for key in keys:
        item = dict[key] if key in dict else 'NULL'
        value.append(item)
    result.append(value)
print "result--{}---".format(result)
data = [
    {'A': 'A1','B': 'B2','C': 'C3','D': 'D4'},
    {'A': 'AA1','C': 'CC3','D': 'DD4','E': 'EE5'},
    {'A': 'AAA1','B': 'BBB2','C': 'CCC3','D': 'DDD4','E': 'EEE5'}
]

keys = set(reduce(lambda x, y: x + y, [_.keys() for _ in data]))

lst = [[_[key] if key in _ else 'NULL' for key in keys] for _ in data]
lst.insert(0, list(keys))

print lst
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题