提供字典词典:
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
您能否建议一种优雅的方式来打印这样的方矩阵?
例如:
答案 0 :(得分:1)
不确定确切的打印效果,但是我尝试编写一些代码。我建议您使用tabulate
或pandas
,因为这样会更容易。
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
第二个:
您可以将seaborn
与matplotlib
一起使用:
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(df);
plt.show()
输出: