2013-10-07 18 views
0

如何以預定義順序從字典中提取數據。動態從Python字典中獲取數據?

例如,在下面的字典中,如何獲取join1的值,然後join2等等,如果有更多的動態,這樣我可以遍歷整個字典並逐個獲取值而不用硬編碼任何東西?

jDict = dict(join1 = dict(jtable='ABC', alias='REF', joinSelColumns=['A'], 
          joinCond=['B', 'C', 'D'], 
          joinGroupClause=['B', 'C', 'D'], 
          joinOrderClause=[('B', 'DESC'), ('C'), ('D')]), 
       join2 = dict(jtable='XYZ', alias = 'NET', joinSelColumns=['S'], 
          joinCond=['T'], 
          joinGroupClause=['M', 'N'], 
          joinOrderClause=[('M', 'DESC'), ('N')])) 
+1

不可能。但可能[this](http://docs.python.org/2/library/collections.html#collections.OrderedDict)。 – BartoszKP

+0

如果你的密鑰全部被調用'join [n]'並且你想按順序遍歷它們,爲什麼不使用一個列表呢?使用字典在這種情況下幾乎沒有優勢。 – l4mpi

+0

看看collections.OrderedDict – Perkins

回答

2

您可以在按鍵排序:

for sortedkey in sorted(jDict): 
    # first join1, then join2 

否則,字典沒有固定的順序。

你可以用collections.OrderedDict()來代替;它按照插入順序維護項目;如果在join2之前插入join1,那麼它在迭代字典時也會首先列出。

如果你有在其他方面相等的物品,只是爲了不同的(所以只是join1join2等),你可能也只是用一個列表來代替。即使你有不同類型的物品,你也可以按類型這些物品; jDict['joins'] = [join1, join2, etc.]

+0

感謝您的建議,我會試試看。 – Amit

+0

OrderedDict()爲我工作。謝謝Martijn。 – Amit