2014-03-03 94 views
0

我有下面的代碼:Python列表切換順序

for i in xrange(len(arr_id)): 
    list.append({'id': arr_id[i], 'porcentaje' : 0, 'estado' : 'En funcionamiento'}) 

如果我打印list看來我得到一個字母順序排列的列表:
[{'estado': 'En funcionamiento', 'id': 0, 'porcentaje': 0}]

這是不是在我定義的順序相同它:
[{'id': 0, 'porcentaje': 0, 'estado': 'En funcionamiento',}]

我該怎麼做才能保持所需的順序?

+8

Python詞典沒有設置順序。爲什麼你需要維護字典鍵順序? –

+0

你正在整理一個只有一個項目的列表,這是一個詞典。正如Martinjn指出的那樣,Python詞典沒有「秩序」。 – Depado

+0

因爲這創建了一個'json',我需要一個確切的順序來讀取它們在Java中。 –

回答

2

首先,列表將維護順序,但列表中的字典不會,因爲字典按照定義無序。有一個名爲OrderedDict的數據類型確實保持順序,但我懷疑你確實需要這樣做。

其他一些意見:

不要使用list作爲變量名。

不要重複,彷彿是Python的C.您可以直接迭代:

for item in arr_id: 
    mylist.append({'id': item, 'porcentaje' : 0, 'estado' : 'En funcionamiento'}) 

甚至使用list comprehension

mylist = [{'id': item, 'porcentaje' : 0, 'estado' : 'En funcionamiento'} 
      for item in arr_id] 
0

首先,你不處理一個列表現在。你正在處理一個嵌套在列表中的詞典(這是毫無意義的,因爲你的列表中只有一個項目)

你不能「排序」一個詞典,因爲它太容易從鍵中獲得它的值。在你的情況下:

>>> x = {'estado': 'En funcionamiento', 'id': 0, 'porcentaje': 0} 
>>> x['estado'] 
b"En funcionamiento" 

所以沒有必要排序一個字典。

雖然你可以顯示你的字典的排序表示。這隻會用於打印目的。

import operator 
x = {'estado': 'En funcionamiento', 'id': 0, 'porcentaje': 0} 
sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1)) 

或者其他的答案中指出,你可以使用一個OrderedDict留住你的字典順序。