在Python中漂亮地打印字典矩阵

时间:2020-11-03 17:34:34

标签: python pandas dictionary

提供字典词典:

dict_2d = collections.defaultdict(dict)

dict_2d['A']['A'] = 1
dict_2d['A']['B'] = 0.19
...
dict_2d['Z']['A'] = 0.76
...
dict_2d['Z']['Z'] = 1

您能否建议一种优雅的方式来打印这样的方矩阵?

例如:

  1. 有没有办法像pandas.Dataframe那样映射或打印它?

enter image description here

  1. 有没有一种方法可以像使用字符串作为索引那样打印热图? https://matplotlib.org/gallery/images_contours_and_fields/matshow.html#sphx-glr-gallery-images-contours-and-fields-matshow-py

2 个答案:

答案 0 :(得分:1)

不确定确切的打印效果,但是我尝试编写一些代码。我建议您使用tabulatepandas,因为这样会更容易。

df = pd.DataFrame(dict_2d)
print(df)

#       A     Z
# A  1.00  0.76
# B  0.19   NaN
# Z   NaN  1.00

我将尽速尝试做出类似的事情。与熊猫的打印内容相比,代码很丑陋,列和行都被翻转了。

def pp(d):
    s = "\t"
    keys = set([k for values in d.values() for k in values])
    s += "\t".join(keys) + "\n"
    for key, value in d.items():
        s += key + "\t"
        for k in keys:
            s += str(d[key].get(k)) + "\t"
        s += "\n"

    print(s)
#      A     B      Z
# A    1     0.19   None    
# Z    0.76  None   1

答案 1 :(得分:1)

第一个问题: 最简单的方法是将2D字典转换为数据框并进行打印:

import collections
import pandas as pd

dict_2d = collections.defaultdict(dict)

dict_2d['A']['A'] = 1
dict_2d['A']['B'] = 0.19
dict_2d['B']['B'] = 2
dict_2d['Z']['A'] = 0.76

df = pd.DataFrame.from_dict(dict_2d,orient='index')

输出(在外壳中):

      A     B
A  1.00  0.19
Z  0.76   NaN
B   NaN  0.19

第二个: 您可以将seabornmatplotlib一起使用:

import seaborn as sns
import matplotlib.pyplot as plt

sns.heatmap(df);
plt.show()

输出:

python nested dict to heatmap