这是我目前的数据结构:
{'bin1': {'A': 14545,
'B': 18579,
'C': 5880,
'D': 20771,
'E': 404396},
'bin2': {'A': 13200,
'B': 12279,
'C': 5000,
'D': 16766,
'E': 200344},
[...] }
我想以表格形式写一张桌子:
A B C D E
bin1 14545 18579 5880 20771 494396
bin2 13200 12279 5000 16766 200344
...
目前我正在使用粗略的打印循环(其中d ==上述字典):
# print the table header
labs = [i for i in d[d.keys()[0]]]
print "bin" + "\t" + "\t".join(labs)
# loop and print the values
for j in d:
print j + "\t" + "\t".join(map(str, [d[j][q] for q in d[j]]))
哪个似乎有用(尽管显然是无序的),但是在我的输出中我发现一些嵌套的词典不包含所有字段A-E。我想一种方法是重建字典,可能使用更合适的矩阵类型数据结构,并用0
填充缺失的值,但考虑到我有这个庞大的嵌套字典,是否有更智能的方式打印上面显示的可以处理缺失元素的输出?
答案 0 :(得分:4)
使用pandas:
import pandas as pd
data = {'bin1': {'A': 14545,
'B': 18579,
'C': 5880,
'D': 20771,
'E': 404396},
'bin2': {'A': 13200,
'D': 16766,
'E': 200344},
}
df = pd.DataFrame(data).T
df.fillna(0, inplace=True)
print(df)
打印
A B C D E
bin1 14545 18579 5880 20771 404396
bin2 13200 0 0 16766 200344
df.fillna(0)
将缺失值替换为0。
答案 1 :(得分:2)
您可以使用d[j].get(q, '0')
代替d[j][q]
为所有缺失的条目填写0
:
# print the table header
labs = sorted(max(d.values(), key=len))
print "bin" + "\t" + "\t".join(labs)
# loop and print the values
for j in d:
print j + "\t" + "\t".join(str(d[j].get(q, '0')) for q in labs)
我还对代码的其他部分做了一些修改,以便对列进行排序。