簡體   English   中英

在Key中按前四個字符對Python Dictionary進行排序

[英]Sort Python Dictionary by first four characters in Key

我有一個python字典,如下所示:

{'666 -> 999': 4388, '4000 -> 4332': 4383, '1333 -> 1665': 7998, '5666 -> 5999': 4495, '3666 -> 3999': 6267, '3000 -> 3332': 9753, '6333 -> 6665': 7966, '0 -> 332': 877}

鍵顯然都是字符串,但每個鍵都描繪了一系列數字。 我想要做的是根據密鑰中的第一個數字對該字典進行排序。 有這么快的方法嗎? 只是在字典上使用sorted並沒有幫助,因為字符串“666”在詞法上大於字符串“1000”。 謝謝你的任何建議

使用排序鍵:

sorted(yourdict, key=lambda k: int(k.split()[0]))

這將返回一個列表,在的第一部分以數字方式排序(在空格上拆分)。

演示:

>>> yourdict = {'666 -> 999': 4388, '4000 -> 4332': 4383, '1333 -> 1665': 7998, '5666 -> 5999': 4495, '3666 -> 3999': 6267, '3000 -> 3332': 9753, '6333 -> 6665': 7966, '0 -> 332': 877}
>>> sorted(yourdict, key=lambda k: int(k.split()[0]))
['0 -> 332', '666 -> 999', '1333 -> 1665', '3000 -> 3332', '3666 -> 3999', '4000 -> 4332', '5666 -> 5999', '6333 -> 6665']

將鍵和值排序在一起:

sorted(yourdict.items(), key=lambda item: int(item[0].split()[0]))

這會產生鍵值對:

>>> sorted(yourdict.items(), key=lambda item: int(item[0].split()[0]))
[('0 -> 332', 877), ('666 -> 999', 4388), ('1333 -> 1665', 7998), ('3000 -> 3332', 9753), ('3666 -> 3999', 6267), ('4000 -> 4332', 4383), ('5666 -> 5999', 4495), ('6333 -> 6665', 7966)]

你可以生成一個collections.OrderedDict()對象

>>> from collections import OrderedDict
>>> OrderedDict(sorted(yourdict.items(), key=lambda item: int(item[0].split()[0])))
OrderedDict([('0 -> 332', 877), ('666 -> 999', 4388), ('1333 -> 1665', 7998), ('3000 -> 3332', 9753), ('3666 -> 3999', 6267), ('4000 -> 4332', 4383), ('5666 -> 5999', 4495), ('6333 -> 6665', 7966)])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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