python-除字母数字排序外,按键对字典项进行排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-除字母数字排序外,按键对字典项进行排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2133字,纯文字阅读大概需要4分钟。
内容图文
我写了这段代码:
n=5
dizN={}
for q in range(0,n+1):
h=n-q
dizN['a'+str(q)+'p'+str(h)]=0
创建这样的字典:
dizN
Out[120]: {'a0p5': 0, 'a1p4': 0, 'a2p3': 0, 'a3p2': 0, 'a4p1': 0, 'a5p0': 0}
请注意,“ n”是我的代码的基本参数.如您所见,字典键字符串中存在的整数总和始终为= n(在这种情况下,= 5,其中n = 5).
对我来说很重要(出于我程序中更困难的目的),对于每个人都可以选择的n个命令,按以下方式对字典进行排序:
{'a0p(n)': 0, 'a1p(n-1)': 0, ....., 'a(n-1)p1': 0, 'a(n)p0': 0}
我的代码还可以,但仅适用于n< 10.
如果n> = 10,则会发生以下情况:(n = 12)dizN:
Out[121]:
{'a0p12': 0,
'a10p2': 0,
'a11p1': 0,
'a12p0': 0,
'a1p11': 0,
'a2p10': 0,
'a3p9': 0,
'a4p8': 0,
'a5p7': 0,
'a6p6': 0,
'a7p5': 0,
'a8p4': 0,
'a9p3': 0}
如您所见,解释器遵循字母数字排序;
任何人都知道是否有办法获得以这种方式排序的相同字典:
{'a0p12': 0,
'a1p11': 0,
'a2p10': 0,
'a3p9': 0,
'a4p8': 0,
'a5p7': 0,
'a6p6': 0,
'a7p5': 0,
'a8p4': 0,
'a9p3': 0,
'a10p2': 0,
'a11p1': 0,
'a12p0': 0}
?
我知道字典基本上是无法排序的,但是我希望有人反正可以达到我的目的的技巧:)
非常感谢!
解决方法:
dict是无序的,因此要获得订单,您将必须对项目进行排序,并使用OrderedDict来维持排序的顺序.要获得所需的顺序,可以从整数组中创建元组,以便按字典顺序排序为整数:
from itertools import groupby
from collections import OrderedDict
d = {'a0p12': 0, 'a10p2': 0, 'a11p1': 0, 'a12p0': 0, 'a1p11': 0, 'a2p10': 0,
'a3p9': 0, 'a4p8': 0, 'a5p7': 0, 'a6p6': 0, 'a7p5': 0, 'a8p4': 0, 'a9p3': 0}
def key_func(x):
"""'a0p12' -> (0, 12)"""
return tuple(int("".join(v)) for k,v in groupby(x[0], key=str.isdigit) if k)
od = OrderedDict(sorted(d.items(), key=key_func))
print(od)
这会给你:
OrderedDict([('a0p12', 0), ('a1p11', 0), ('a2p10', 0), ('a3p9', 0),
('a4p8', 0), ('a5p7', 0), ('a6p6', 0), ('a7p5', 0), ('a8p4', 0),
('a9p3', 0), ('a10p2', 0), ('a11p1', 0), ('a12p0', 0)])
您还可以使用正则表达式查找数字组:
from collections import OrderedDict
import re
d = {'a0p12': 0, 'a10p2': 0, 'a11p1': 0, 'a12p0': 0, 'a1p11': 0, 'a2p10': 0,
'a3p9': 0, 'a4p8': 0, 'a5p7': 0, 'a6p6': 0, 'a7p5': 0, 'a8p4': 0, 'a9p3': 0}
def key_func(x,patt=re.compile("\d+")):
"""'a0p12' -> (0, 12)"""
return tuple(map(int, patt.findall(x[0])))
od = OrderedDict(sorted(d.items(), key=key_func))
print(od)
内容总结
以上是互联网集市为您收集整理的python-除字母数字排序外,按键对字典项进行排序全部内容,希望文章能够帮你解决python-除字母数字排序外,按键对字典项进行排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。