2014-02-12 15 views
0

因此,我已初始化的for循環的是在一定範圍的對象,其中,範圍從1開始,並在一個模型具有插入項字典具有反向for循環(django的)

for count in range(1, len(field_list)): 
    f_val = getattr(instance, field_list[count]) 
    field_values[field_list[count]] = f_val 
    print "field_values: ", field_values    

字段的最大數目結束迭代f_val變量使用model_instance.field_name計算字段值,並在「field_values」字典中將字段名稱和字段值作爲鍵值對插入。當我打印field_values我得到:

field_values: {'descr': u'ggg'} 
field_values: {'descr_en': u'sg', 'descr': u'ggg'} 
field_values: {'notes': u'ddddf', 'descr_en': u'sg', 'descr': u'ggg'} 

所以我想現在要做的就是逆轉鍵值對的順序,使得我有{'descr': u'ggg', 'descr_en': u'sg', 'notes': u'ddddf'}。因此,我在我的初始循環(for count in reversed(range(1, len(field_list))):)中使用了reversed(),但我的字典雖然是從最後一個鍵值對開始,而不是第一個循環,但最終的輸出結果與開始時相同。

field_values: {'notes': u'ddddf'} 
field_values: {'notes': u'ddddf', 'descr_en': u'sg'} 
field_values: {'notes': u'ddddf', 'descr_en': u'sg', 'descr': u'ggg'} 

所以我想知道爲什麼會發生這種情況?它是否默認排序我的字典?如果這種方法行不通,我可以採用哪些其他方法?

+1

字典鍵是_unordered_。 –

回答

2

詞典是由它們的鍵(documentation found here)收錄無序數據類型,因此它並不重要,你添加鍵,您的dict順序。

sorting a dictionary by valuesorting a dictionary by key使用OrderedDict有一些很好的問題。

+0

雖然你爲什麼要這樣做,而不是美學(浪費計算能力IMO)我不知道... – Ewan

+0

我在django這樣做,我有很多模型有很多領域,因此我想在我的模板中按順序渲染所有內容。所以你可以說這是爲了組織的美學......來幫助用戶更快速地識別字段。 – per7inac1ousQ

+0

無論如何,你提供的anwser真的很有幫助!非常感謝! – per7inac1ousQ

2

詞典是無序的,所以將項目插入到它們的順序並不重要。

標準庫也有字典的有序版本,collections.OrderedDict。也許你可以使用它。