Python 3.x 在Python中使用多个小数点和字符串对字典中的键进行排序
我正在使用Python 3.5。我有一本有词条的字典:Python 3.x 在Python中使用多个小数点和字符串对字典中的键进行排序,python-3.x,sorting,dictionary,Python 3.x,Sorting,Dictionary,我正在使用Python 3.5。我有一本有词条的字典: myresult = { '6.1.2 & 6.3.2, abcd' : xyz, '6.10.2 & 6.12.2, hjsd' : xyz, abc, ssd '6.2.2 & 6.4.2, abcd' : asd, '6.9.2 & 6.11.2, qwer' : tzu, '6.21.2 &am
myresult = { '6.1.2 & 6.3.2, abcd' : xyz,
'6.10.2 & 6.12.2, hjsd' : xyz, abc, ssd
'6.2.2 & 6.4.2, abcd' : asd,
'6.9.2 & 6.11.2, qwer' : tzu,
'6.21.2 & 6.23.2, xzty' : asd }
预期产量为
>>>'6.1.2 & 6.3.2, abcd' : xyz
'6.2.2 & 6.4.2, abcd' : asd
'6.9.2 & 6.11.2, qwer' : tzu,
'6.10.2 & 6.12.2, hjsd' : xyz, abc, ssd
'6.21.2 & 6.23.2, xzty' : asds
i、 例如,我需要将小数点后的数字作为普通整数进行排序
我尝试使用进行键入排序(myresult.keys()):打印(键)
输出是
'6.1.2 & 6.3.2, abcd' : xyz
'6.10.2 & 6.12.2, hjsd' : xyz, abc, ssd
'6.2.2 & 6.4.2, abcd' : asd
'6.21.2 & 6.23.2, xzty' : asds
'6.9.2 & 6.11.2, qwer' : tzu
任何帮助都将不胜感激
谢谢实现这一点的一个简单方法是为排序的提供一个键函数:
def num_keyfn(something):
parts = something.split(".")
return tuple(int(x) if x.isnumeric() else x for x in parts)
for key in sorted(myresult.keys(), key=num_keyfn):
print(key)
这张照片是:
6.1.2 & 6.3.2, abcd
6.2.2 & 6.4.2, abcd
6.9.2 & 6.11.2, qwer
6.10.2 & 6.12.2, hjsd
6.21.2 & 6.23.2, xzty
这不是完美的,因为如果在某个地方的差异,它将不起作用,但是你可以看到原理并使它适应你的需要。
当
排序
(或排序
)被赋予一个键
函数时,它将首先对元素调用此函数,而不是直接比较元素。例如,要按长度对字符串排序,可以提供参数key=len
Python可以比较元组:(2,4)
比(2,5)
小
在我的回答中,我将每个点上的字符串拆分为多个部分,并将其转换为
int
任何.isnumeric()
的部分。虽然“10”
小于“2”
,10
不小于2
,但它产生的输出与排序(myresult.keys())
@Seetharama几秒钟前我更改了它,你用最新版本试用过吗?效果很好!!你能解释一下吗?:-)在答案下面添加了一些解释。@Seetharama我明白了,我犯了一个错误。已更正的num\u keyfn
现在已在答案中。