Python 在字典中初始化键/值对的最佳方法

Python 在字典中初始化键/值对的最佳方法,python,list,dictionary,Python,List,Dictionary,我在Python 3中工作 我有一块板,上面有我必须存储的单元格,每个单元格都有一个坐标,需要存储3个值。我使用了一个字典,其中键等于单元格的坐标,值是存储所需值的3个元素的列表。 当电路板变大并且存储了大量的键/值对时,获取和读取这些值会很快吗? 或者,还有什么方法在速度方面更有效 亚历克斯 编辑: 每个单元格需要的3个值是0或1。我有一个包含电路板维度的元组,一个包含所有单元位置的元组,该单元位置的第一个值应为1,一个包含所有单元位置的冻结集,该单元位置的第二个值应为1,以及一个包含所有单元

我在Python 3中工作

我有一块板,上面有我必须存储的单元格,每个单元格都有一个坐标,需要存储3个值。我使用了一个字典,其中键等于单元格的坐标,值是存储所需值的3个元素的列表。 当电路板变大并且存储了大量的键/值对时,获取和读取这些值会很快吗? 或者,还有什么方法在速度方面更有效

亚历克斯

编辑:

每个单元格需要的3个值是0或1。我有一个包含电路板维度的元组,一个包含所有单元位置的元组,该单元位置的第一个值应为1,一个包含所有单元位置的冻结集,该单元位置的第二个值应为1,以及一个包含所有单元位置的元组,该单元位置的第三个值应为1:

tuple1是一个元组,它包含每个表示第一个值为1的单元格位置的元组,frozenset包含每个表示第二个值为1的单元格位置的元组,tuple2包含每个表示第三个值为1的单元格位置的元组(在列表中)

代码:

现在查找键和值会很快吗

编辑2:这是建立这样一本词典的最快方法吗?

使用
numpy

如果你正在寻找性能,我认为你应该认真考虑布尔值。将元组作为值的二维板可以看作是三维矩阵:

import numpy as np

width, height = 5, 5

board = np.full((width,height,3), False, dtype = bool)
tuple1 = ((1,2), (3,4), (0,2))

for i,j in tuple1:
    board[i,j,0] = True

print(board)
#   [[[False False False]
#     [False False False]
#     [ True False False]
#     [False False False]
#     [False False False]]

#    [[False False False]
#     [False False False]
#     [ True False False]
#     [False False False]
#     [False False False]]

#    [[False False False]
#     [False False False]
#     [False False False]
#     [False False False]
#     [False False False]]

#    [[False False False]
#     [False False False]
#     [False False False]
#     [False False False]
#     [ True False False]]

#    [[False False False]
#     [False False False]
#     [False False False]
#     [False False False]
#     [False False False]]]
使用标准列表 如果无法使用
numpy
,则可以使用标准列表:

width, height = 5, 5

board = [[[0, 0, 0] for j in range(width)] for i in range(height)]
tuple1 = ((1,2), (3,4), (0,2))

for i,j in tuple1:
    board[i][j][0] = 1

from pprint import pprint
pprint(board)  
[[[0, 0, 0], [0, 0, 0], [1, 0, 0], [0, 0, 0], [0, 0, 0]],
 [[0, 0, 0], [0, 0, 0], [1, 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], [1, 0, 0]],
 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]]

我不认为使用dict有任何好处。它只会洗牌你的单元格,使显示更困难。

显示代码(一个小例子)你的意思是你会做类似于
board[(x,y,z)]=[a,b,c]
?我用代码编辑了文章,我确实在做这样的事情!这取决于应用程序的范围和用途,例如,如果应用程序变得庞大,您可能希望使用数据库研究持久存储。对于一个小型应用程序,您的方法可能很好,但正如我所说,这取决于。它相对较小,在dict中最多会有2400个键/值对。在我的情况下,使用外部模块是不行的,我只能使用Python的内置模块modules@AlexanderAmeye:太糟糕了,
numpy
看起来很合适。请注意,它通常包含在Python标准发行版中。@AlexanderAmeye:使用列表更新了示例。这应该比口述更容易,所以使用列表不会使整个过程变慢?我认为使用dicts的优势在于查找键和获取它们的值的速度?因为我需要经常编辑这些列表的值,我希望这种情况很快发生:)
width, height = 5, 5

board = [[[0, 0, 0] for j in range(width)] for i in range(height)]
tuple1 = ((1,2), (3,4), (0,2))

for i,j in tuple1:
    board[i][j][0] = 1

from pprint import pprint
pprint(board)  
[[[0, 0, 0], [0, 0, 0], [1, 0, 0], [0, 0, 0], [0, 0, 0]],
 [[0, 0, 0], [0, 0, 0], [1, 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], [1, 0, 0]],
 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]]