2016-05-07 61 views
-1

我知道鍵的順序不能保證,這是確定的,但究竟是什麼意思,該值的順序不能保證,以及*Matrix作爲字典;它安全嗎?

例如,我代表一個矩陣作爲一本字典,像這樣:

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(),這些值可能以任何順序出現。但值是行,而不是每行的元素。每一行都是一個列表,列表維護它們的順序。

如果你想要的維持秩序的字典,Python有太:https://docs.python.org/2/library/collections.html#collections.OrderedDict

+0

約翰感謝給予好評。在我的應用程序中,行是單詞和列文檔,所以我可以說第一列是第一個文檔? – gsamaras

+0

@gsamaras:是的。 –

+0

哦,偉大的約翰,所以鍵的順序將與值的順序相同。我的意思是'signatures_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

這是一個數字羅蘭德爾!感謝您的信息... – gsamaras