初始化词典中键/值对的最佳方法

时间:2017-05-03 12:03:35

标签: python list dictionary

我正在使用Python 3

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

亚历

编辑:

每个单元格需要的3个值是零或1。我有一个元组,其中包含电路板的尺寸,一个包含所有单元格位置的元组,其值为1作为第一个值,一个包含所有单元格位置的元组,其值应为1作为第二个值value和一个元组,其中包含值为1的所有单元格位置作为第三个值:

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

代码:

board = {}

for row in range(dimension[0]):
    for col in range(dimension[1]):
        board[(row,col)] = [0,0,0] #default
for x in tuple1:
    board[x][0] = 1

for x in frozenset:
    board[x][1] = 1

for x in tuple2:
    board[x][2] = 1

return board

现在查找键和值是否很快?

EDIT2:这是设置这样字典的最快方法吗?

1 个答案:

答案 0 :(得分:2)

使用numpy

如果您正在寻找性能,我认为您应该认真考虑使用布尔值numpy。具有元组值的二维板可以看作3D矩阵:

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]]]

我认为使用词典没有任何优势。它只会改变你的细胞并使显示更难。