2015-12-10 174 views
1

我有一個字典,其中的鍵是整數,值是字符串。字典已使用鍵值進行排序。 我需要將相應的字符串值(保持排序順序)複製到列表中。我無法弄清楚如何迭代字典。迭代python字典?

我知道字典中鍵值對的數量(讓它是'n')。

Some_ordered_dict 
    resultant_list=[] 
    for i in range(n): 
     resultant_list.append(Some_ordered_dict[increment-key?] 

該字典使用OrderedDict從一些字典'dic'進行排序如下;

od=collections.OrderedDict(sorted(dic.items())) 

重要的是我必須按照它們出現在已排序字典中的相同順序顯示字典的字符串值。

+1

字典沒有秩序。 – RemcoGerlich

+0

你是否使用'OrderedDict'開頭?如果你想遍歷字典,可以在Python 2中使用'iteritems'或者在python 3中使用'items'。 –

+2

如果你從'sorted(dic.items())'構建了OrderedDict,爲什麼不迭代'sorted dic.items())'直接? – user2357112

回答

1

標準Python字典不保證字典中的項目將以任何順序保存。接下來的事情是,你必須使用「爲」語句像這樣的迭代:

Some_ordered_dict 
    resultant_list=[] 
    for i in Some_ordered_dict: 
     resultant_list.append(Some_ordered_dict[i]) 

你應該the ordered dict collection看一看,以確保您的字典中的項目都保存在您所期望的順序。

1

使用Python中的標準無序的字典,你可以使用這樣的事情:

resultant_list = [] 
for i in sorted(dict.keys()): 
    resultant_list.append(dict[i]) 
3
resultant_list = [d[k] for k in sorted(d)] 
+1

解開這一點 - 在字典上迭代遍歷鍵,所以'sorted(d)'是字典鍵的有序迭代。 –

+0

是的;這是一個有用的評論@PeterDeGlopper。謝謝。 – Riccati

0

正如在其他帖子中提到,字典不保證秩序。獲得排序列表的一種方法是創建一個元組列表你的字典的(鍵,值)對,然後進行排序基於此列表n中的第一個元素(關鍵),具體如下:

my_dict = {2: 'two', 3: 'three', 1: 'one'} 
my_tuple_list = list(zip(my_dict.keys(), my_dict.values())) 
my_sorted_list = sorted(my_tuple_list, key = lambda item: item[0]) 
resultant_list = [x[1] for x in my_sorted_list] 
+0

'my_tuple_list'在3.x上只是'my_dict.items()'(或'list(my_dict.items())',或者你可以把它作爲一個迭代器)。對於'my_sorted_list',使用'import operator'可以獲得較小的效率提升; my_sorted_list = sorted(my_tuple_list,key = operator.itemgetter(0))''。我會在'my_sorted_list'中使用'maximize_list = [v for(k,v)'',但這只是一種嘗試。或者總結一下,'my_dict = {...};在排序的(my_dict,key = operator.itemgetter(0))]中結果列表= [v for(k,v)]' –