python – 从Dictionary中的值列表创建矩阵

我希望将以下字典转换为矩阵,其中字典的第一个和第二个值是列和行值.在矩阵为真的情况下,我希望有一个’1′,当它是假的时我想要一个’0′.

{0:[2,5.0],1:[6,7.0],2:[6,8.0],3:[5,6.0],4:[1,5.0],5:[3,4.0],6 :[4,5.0]}

期望的输出看起来像这样

        1   2   3   4   5   6   7   8

1       0   0   0   0   1   0   0   0
2       0   0   0   0   1   0   0   0
3       0   0   0   1   0   0   0   0
4       0   0   1   0   1   0   0   0
5       1   1   0   1   0   1   0   0
6       0   0   0   0   1   0   1   1
7       0   0   0   0   0   1   0   0
8       0   0   0   0   0   1   0   0

谢谢堆,任何指针都会很棒!

丹妮尔.

最佳答案 这是一个匹配你想要的输出,虽然我认为使用@ Antimony的答案作为基础(numpy)可能是要走的路(至少比这个答案更多)

N = 8

d = {0: [2, 5.0], 1: [6, 7.0], 2: [6, 8.0], 3: [5, 6.0], 4: [1, 5.0], 5: [3, 4.0], 6: [4, 5.0]}

m = [0] * (N ** 2 + 1)

for x, y in d.values():
    m[x + int(y - 1) * N] = 1
    m[int(y) + (x - 1) * N] = 1

print " ".ljust(9),
print "   ".join(map(str, range(1, N + 1)))
print
for i in range(1, N ** 2 + 1):
    if i % N == 1:
        print "%d  ".ljust(10) % (i / N + 1),
    val = m[i]
    print "%d  " % val,
    if not i % N:
        print

OUTPUT

          1   2   3   4   5   6   7   8

1         0   0   0   0   1   0   0   0  
2         0   0   0   0   1   0   0   0  
3         0   0   0   1   0   0   0   0  
4         0   0   1   0   1   0   0   0  
5         1   1   0   1   0   1   0   0  
6         0   0   0   0   1   0   1   1  
7         0   0   0   0   0   1   0   0  
8         0   0   0   0   0   1   0   0 

根据@ DSM对@ Antimony的回答的评论,这里有一个使用numpy:

import numpy
N = 8
m = numpy.zeros((N,N))

d = {0: [2, 5.0], 1: [6, 7.0], 2: [6, 8.0], 3: [5, 6.0], 4: [1, 5.0], 5: [3, 4.0], 6: [4, 5.0]}

for i,j in d.itervalues(): 
    m[i-1,j-1] = 1
    m[j-1,i-1] = 1

print " ".ljust(9),
print "   ".join(map(str, range(1, N + 1)))
print
for i, line in enumerate(m.tolist()):
    print "%s %s" % (("%s".ljust(10) % (i+1),"   ".join(map(str, map(int, line)))))

OUTPUT

          1   2   3   4   5   6   7   8

1         0   0   0   0   1   0   0   0
2         0   0   0   0   1   0   0   0
3         0   0   0   1   0   0   0   0
4         0   0   1   0   1   0   0   0
5         1   1   0   1   0   1   0   0
6         0   0   0   0   1   0   1   1
7         0   0   0   0   0   1   0   0
8         0   0   0   0   0   1   0   0
点赞