2010-09-23 97 views
1

我有一個Python字典中的二維字典,由兩個IP索引。我想按第一個鍵將字典分組。Python通過第一鍵排序二維字典

例如,之前是這樣的:

myDict["182.12.17.50"]["175.12.13.14"] = 14 
myDict["182.15.12.30"]["175.12.13.15"] = 10 
myDict["182.12.17.50"]["185.23.15.69"] = 30 
myDict["182.15.12.30"]["145.33.34.56"] = 230 

所以

for key1, key2 in myDict: 
    print key1 +" " +key2 +" " +myDict[key1, key2] 

將打印

182.12.17.50 175.12.13.14 14 
182.15.12.30 175.12.13.15 10 
182.12.17.50 185.23.15.69 30 
182.15.12.30 145.33.34.56 230 

但我想對它進行排序,因此將打印

182.12.17.50 175.12.13.14 14 
182.12.17.50 185.23.15.69 30 
182.15.12.30 175.12.13.15 10 
182.15.12.30 145.33.34.56 230 

任何想法如何實現?

+0

你能舉一個你想要輸出的真實例子嗎?你給「排序後」的例子是賦值語句,你可以按照你想要的順序放入。 – 2010-09-23 18:50:39

+0

@Daniel,賦值語句的意思就是如果你在for循環中運行它,它將如何打印,添加更多的澄清。 – 2010-09-23 19:35:44

回答

2

那麼,有各種選擇。其中之一是將按鍵打印之前,這樣的排序:

for key1 in sorted(myDict): 
    for key2 in myDict[key1]: 
     print key1 +" " +key2 +" " +myDict[key1][key2] 

另一種選擇是使用sorteddict類從blist模塊(聲明:我是作者:)),這將始終按排序順序返回鍵。

無論哪種情況,由於密鑰都是IP地址,因此您可能希望編寫一個自定義「密鑰」函數來傳遞sort/sorted/sorteddict,以便按照它們的數值進行排序,而不是按字典順序排列爲字符串。

0

我想,我還沒有很好地理解這個問題。

豈不以上字典的輸出是這樣的:

>>> myDict 
{'182.12.17.50': {'185.23.15.69': 30, '175.12.13.14': 14}, '182.15.12.30': {'175.12.13.15': 10, '145.33.34.56': 230}} 

,然後你可以使用OrderedDict創建一個排序的字典。

1

口令沒有順序,但你可以得到的是一個排序的項目列表。

>>> sorted((k, sorted(v.items())) for k,v in myDict.items()) 
[('182.12.17.50', [('175.12.13.14', 14), ('185.23.15.69', 30)]), 
('182.15.12.30', [('145.33.34.56', 230), ('175.12.13.15', 10)])] 
0

字典是一種無序的類型,在你的例子中,我沒有看到你想要字典命令的原因。

如果你需要創建一個有序的系列字典的內容,即它的項目,你可以做到這一點簡單地通過應用sorted

# Returns sorted list of item tuples 
sorted(myDict.iteritems()) 

或檢查出OrderedDict如果你的Python版本支持它,你知道什麼意思,有一個分類字典。