只访问嵌套字典列表中的一个键并使用matplotlib打印它

2024-04-25 23:08:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套的字典列表,创建方式如下:

N = 30
grid = []
for row in range(N):
   rows = []
   for column in range(N):
      each_cell = {"check": 0, "type": -1}
      rows.append(each_cell)
   grid.append(rows)

类型是我要绘制的类型,值-1表示单元格中没有任何内容,0,1,2,3是不同的类型(不是渐变),我希望用不同的颜色来表示。你知道吗

我将随机数目的类型放入网格,如下所示:

import numpy.random as rnd
import matplotlib.pyplot as plt

for i in range (rnd.randint(0, N*N)):
   x = rnd.randint(0, N)
   y = rnd.randint(0, N)
   grid[x][y]['check'] = 1
   if grid[x][y]['check'] == 1:
      grid[x][y]['type'] = rnd.randint(0,4)

我试图用这个来描绘它:

plt.imshow(grid['type'], interpolation = 'nearest', cmap = 'gist_ncar_r')
plt.show()

但显然grid['type']并不是像我希望的那样只挑选类型,有人知道如何解决这个问题吗?你知道吗


Tags: inimport类型forchecktypecellrange
2条回答

由于imshow需要一个“类似数组的”,您可以更改数据的结构,使其更易于使用。与其使用dict数组,不如使用dict数组。你知道吗

import numpy.random as rnd
import matplotlib.pyplot as plt

N = 30
grid = {'check': [], 'type': []}

for row in range(N):
    check_rows = []
    type_rows = []
    for column in range(N):
        check_rows.append(0)
        type_rows.append(1)
    grid['check'].append(check_rows)
    grid['type'].append(type_rows)

for i in range (rnd.randint(0, N*N)):
    x = rnd.randint(0, N)
    y = rnd.randint(0, N)
    grid['check'][x][y] = 1
    if grid['check'][x][y] == 1:
        grid['type'][x][y] = rnd.randint(0,4)

plt.imshow(grid['type'], interpolation = 'nearest', cmap = 'gist_ncar_r')
plt.show()

您可以使用列表理解将所需的数据获取到数组中:

from numpy import *
...
data = array([[grid[i][j]['type'] for j in range(N)] for i in range(N)])

要使用array,您需要执行numpy导入。你知道吗

然后你就可以把它描绘成:

matplotlib.pyplot.imshow(data, interpolation = 'nearest', cmap = 'gist_ncar_r')
matplotlib.pyplot.show()

相关问题 更多 >