使用反向forloop(django)将项目插入字典

时间:2014-02-12 09:26:25

标签: python django data-structures dictionary

所以我初始化了一个forloop迭代一系列对象,其范围从1开始,以模型所具有的最大字段数结束

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'}。因此,我在我的初始循环(reversed())中使用for count in reversed(range(1, len(field_list))):,但我的字典虽然以最后一个键值对而不是第一个键值开始,但最终输出与开头相同。

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'}

所以我想知道为什么会这样?它默认排序我的字典吗?如果这种方法不起作用,我可以采用其他方法吗?

2 个答案:

答案 0 :(得分:2)

字典是无序的,因此将项目插入其中的顺序无关紧要。

标准库也有字典的有序版本collections.OrderedDict。也许你可以使用它。

答案 1 :(得分:2)

字典是按其键(documentation found here)索引的无序数据类型,因此您向dict添加密钥的顺序无关紧要。

使用sorting a dictionary by valuesorting a dictionary by keyOrderedDict提出了一些很棒的问题。