2014-02-12 16 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。也许你可以使用它。