Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Python中使用多个小数点和字符串对字典中的键进行排序_Python 3.x_Sorting_Dictionary - Fatal编程技术网

Python 3.x 在Python中使用多个小数点和字符串对字典中的键进行排序

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

我正在使用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 & 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
现在已在答案中。