2011-09-16 273 views
0
>>> the_values = [u'abc', u'kfc', u'listproperty', u'models', u'new', u'newer', u'note', u'order', u'tag', u'test', u'type'] 
>>> the_keys = [1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1] 
d2 = dict(zip(the_keys, the_values)) 
>>> d2 
{1: u'type', 2: u'tag'} 

你能給我一個線索,爲什麼只有「類型」和「標籤」被採取?按鍵排序python字典

我正在嘗試通過the_keys排序the_values

我注意到,開關的the_valuesthe_keys工作順序:

>>> d2 = dict(zip(the_values, the_keys)) 
>>> d2 
{u'abc': 1, u'models': 2, u'note': 1, u'tag': 2, u'kfc': 2, u'newer': 1, u'listproperty': 1, u'test': 1, u'new': 1, u'type': 1, u'order': 1} 

感謝。

+1

[標準] *詞典*沒有排序,只將特定鍵映射到*單個*值。可以創建(鍵,值)對的有序*列表*。 – 2011-09-16 02:10:50

回答

3

鍵必須是唯一的,所以使用1和2作爲唯一的鍵意味着你只能有兩個值與它們相關聯。

當您創建字典時,您將鍵設置爲對應於某個值。所以首先,1 - > abc,2 - > kfc。但是,你會不斷壓倒關鍵,給他們不同的價值觀。最後,只保留鍵的最新值(1 - > type,2-> tag)。

2

因爲根據定義,字典具有唯一的鍵。 (否則,如何知道在查找鍵時要返回哪個值?)dict構造函數遍歷鍵 - 值對並將該值分配給字典中的相應鍵,覆蓋之前已有值的鍵當下。

3

正如其他人所說,鑰匙必須是唯一的。爲了解決這個問題,你不能使用字典。

>>> [x[1] for x in sorted(zip(the_keys, the_values), key=operator.itemgetter(0))] 
[u'abc', u'listproperty', u'new', u'newer', u'note', u'order', u'test', u'type', u'kfc', u'models', u'tag']