7

这是我拥有的当前数据结构:

{'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]]))

这似乎有效(尽管显然是无序的),但是在我的输出中我发现一些嵌套字典不包含所有字段 AE。我想这样做的一种方法是重建字典,也许使用更合适的矩阵类型数据结构并用 填充缺失值0,但鉴于我手头有这么大的嵌套字典,有没有更聪明的打印方法上面显示的输出可以处理丢失的元素吗?

4

2 回答 2

8

使用熊猫

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 替换缺失值。

于 2013-09-11T16:23:55.027 回答
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)

我还对代码的其他部分进行了一些细微的修改,以便对列进行排序。

于 2013-09-11T16:22:27.870 回答