簡體   English   中英

Python通過第一個鍵對二維字典進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM