2016-05-07 3 views
-1

Я знаю, что порядок ключей не гарантируется, и это нормально, но что именно означает, что порядок значений также не гарантируется *?Матрица в качестве словаря; это безопасно?

Например, я представляю матрицу в виде словаря, например:

signatures_dict = {} 
M = 3 
for i in range(1, M): 
    row = [] 
    for j in range(1, 5): 
     row.append(j) 
    signatures_dict[i] = row 
print signatures_dict 

ли столбцы моей матрицы построены правильно? Предположим, у меня есть 3 ряда и на этой линии signatures_dict[i] = row, row всегда будет иметь 1, 2, 3, 4, 5. Что будет signatures_dict?

1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 

или что-то вроде

1 2 3 4 5 
1 4 3 2 5 
5 1 3 4 2 

? Меня беспокоит межплатформенная поддержка.

В моем приложении строки являются словами и документами столбцов, поэтому могу ли я сказать, что первый столбец - это первый документ?

* Are order of keys() and values() in python dictionary guaranteed to be the same?

ответ

1

Вы гарантированно иметь в каждой строке 1 2 3 4 5. Он не будет переупорядочивать их. Отсутствие порядка values() относится к тому факту, что при вызове signatures_dict.values() значения могут выдаваться в любом порядке. Но значения представляют собой строки, а не элементы каждой строки. Каждая строка представляет собой список, и списки поддерживают их порядок.

Если вы хотите Dict, который поддерживает порядок, Python имеет что тоже: https://docs.python.org/2/library/collections.html#collections.OrderedDict

+0

Джон благодарит за верхнюю часть. В моем приложении строки представляют собой слова и документы столбцов, поэтому могу ли я сказать, что первый столбец является первым документом? – gsamaras

+0

@ gsamaras: Да. –

+0

О, великий Джон, поэтому порядок ключей будет таким же, как и порядок значений. С этим я имею в виду, что 'signatureatures_dict.keys() [0]' будет извлекать первый ключ (в зависимости от того, что хранится первым), а также для 'signatures_dict.values ​​() [0]', который выберет соответствующее значение для первого ключа , – gsamaras

1

Почему бы не использовать список списков в качестве матрицы? У него будет любой порядок, который вы ему дали;

In [1]: matrix = [[i for i in range(4)] for _ in range(4)] 

In [2]: matrix 
Out[2]: [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] 

In [3]: matrix[0][0] 
Out[3]: 0 

In [4]: matrix[3][2] 
Out[4]: 2 
+0

Рональд, я подумал, что должен упомянуть об этом, я заслужил твоего понижения, потому что это не так. Потому что мне сказали так: http://stackoverflow.com/questions/37062078/storing-the-result-of-minhash. Тем не менее вы заслуживаете повышения, чтобы сбросить код. :) – gsamaras

+0

Это зависит от того, что более важно в вашем приложении. Если важно всегда перебирать данные в одном порядке, я бы предложил список списков. Если первый индекс не является числом, вам лучше пойти со словарем. Кстати, здесь нет Рональда :-) –

+0

Это номер Rolandl! Спасибо за информацию ... – gsamaras