1

我有一个按以下方式格式化的python字典:

data[author1][author2] = 1

该字典包含每个可能的作者对(所有 8500 个作者对)的条目,我需要为所有作者对输出一个如下所示的矩阵:

        "auth1" "auth2" "auth3" "auth4" ...
"auth1"    0       1       0       3
"auth2"    1       0       2       0
"auth3"    0       2       0       1       
"auth4"    3       0       1       0
...

我尝试了以下方法:

x = numpy.array([[data[author1][author2] for author2 in sorted(data[author1])] for author1 in sorted(data)])
print x
outf.write(x)

然而,打印这个给我留下了这个:

[[0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 ..., 
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]]

并且输出文件只是一个空白文本文件。我正在尝试以读入 Gephi 的方式格式化输出(https://gephi.org/users/supported-graph-formats/csv-format/

4

2 回答 2

2

你几乎做对了,你的列表理解是倒置的。这将为您提供预期的结果:

d = dict(auth1=dict(auth1=0, auth2=1, auth3=0, auth4=3),
         auth2=dict(auth1=1, auth2=0, auth3=2, auth4=0),
         auth3=dict(auth1=0, auth2=2, auth3=0, auth4=1),
         auth4=dict(auth1=3, auth2=0, auth3=1, auth4=0))

np.array([[d[i][j] for i in sorted(d.keys())] for j in sorted(d[k].keys())])
#array([[0, 1, 0, 3],
#       [1, 0, 2, 0],
#       [0, 2, 0, 1],
#       [3, 0, 1, 0]])
于 2014-04-17T18:29:05.653 回答
1

你可以使用pandas. 使用@Saullo Castro 输入:

import pandas as pd        
df = pd.DataFrame.from_dict(d)

结果:

>>> df
       auth1  auth2  auth3  auth4
auth1      0      1      0      3
auth2      1      0      2      0
auth3      0      2      0      1
auth4      3      0      1      0

如果你想保存你可以做df.to_csv(file_name)

于 2014-04-17T18:33:03.293 回答