[英]Python Sort Two Dimensional Dictionary By First Key
我在python中有一個由兩個IP索引的2D字典。 我想按第一個鍵對字典進行分組。
例如,before看起來像這樣:
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
知道如何實現嗎?
好吧,有多種選擇。 其中之一是在打印之前對鍵進行排序,如下所示:
for key1 in sorted(myDict):
for key2 in myDict[key1]:
print key1 +" " +key2 +" " +myDict[key1][key2]
另一個選擇是使用blist模塊中的sorteddict類(免責聲明:我是作者:)),它將始終按排序順序返回鍵。
在這兩種情況下,由於鍵都是IP地址,因此您可能需要編寫一個自定義的“鍵”函數以傳遞給sort / sorted / sorteddict,以便它們將按其數字值而不是按字典順序作為字符串進行排序。
字典沒有順序,但是您可以得到的是項目的排序列表。
>>> 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)])]
您可以將自定義比較功能傳遞給Sorted。 http://docs.python.org/library/functions.html#sorted
使用它,您可以指定比較哪個鍵以及如何比較。
我想我對這個問題不太了解。
上面的字典的輸出不是這樣的:
>>> 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創建排序字典。
字典是無序類型,在您的示例中,我看不出您希望將字典排序的原因。
如果您需要創建字典內容的有序序列(即字典項),則只需應用sorted
:
# Returns sorted list of item tuples
sorted(myDict.iteritems())
或查看OrderedDict
如果您的Python版本支持它),並且您知道擁有排序字典是什么意思。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.