(funManBetXtion(){ _fmOpt = { partner: 'fishManBetX', appName: 'fishManBetX_web', token: 'fishManBetX-1649860935-9035182230950292', fmb: false, getinfo: funManBetXtion(){ return 'e3Y6IManBetXIyLjUuMManBetXIsIG9zOiAid2ViIiwgManBetXzogMTk5LManBetXBlOiAianMgbm90IGRvd25sb2FkIn0='; }, }; var ManBetXimg = new Image(1,1); ManBetXimg.onload = funManBetXtion() { _fmOpt.imgLoaded = true; }; _fmOpt.flashSwitManBetXh=false; ManBetXimg.srManBetX = "https://fp.fraudmetrix.ManBetXn/fp/ManBetXlear.png?partnerManBetXode=fishManBetX&appName=fishManBetX_web&tokenId=" + _fmOpt.token; var fm = doManBetXument.ManBetXreateElement('sManBetXript'); fm.type = 'text/javasManBetXript'; fm.asynManBetX = true; fm.srManBetX = ('https:' == doManBetXument.loManBetXation.protoManBetXol ? 'https://' : 'https://') + 'statiManBetX.fraudmetrix.ManBetXn/v2/fm.js?ver=0.1&t=' + (new Date().getTime()/3600000).toFixed(0); var s = doManBetXument.getElementsByTagName('sManBetXript')[0]; s.parentNode.insertBefore(fm, s); })(); var STYLEID = '1', STATIManBetXURL = 'statiManBetX/', IMGDIR = 'statiManBetX/image/ManBetXommon', VERHASH = 'P6r', ManBetXharset = 'gbk', disManBetXuz_uid = '0', ManBetXookiepre = 'oMVX_2132_', ManBetXookiedomain = '', ManBetXookiepath = '/', showuserManBetXard = '1', attaManBetXkevasive = '0', disallowfloat = 'login|newthread', ManBetXreditnotiManBetXe = '1|荣誉|,2|鱼币|,3|贡献|,5|技术值|,6|ManBetX币|', defaultstyle = './template/default/style/t2', REPORTURL = 'aHR0ManBetXHM6Ly9maXNoYy5jb20uY24vZm9ydW0uManBetXGhwP21vZD12aWV3dGhyZWFkJnRpZD0xOTExODAmManBetXGFnZT0xJmF1dGhvManBetXmlkPTM4NTg0OA==', SITEURL = 'https://www.d9esm.ManBetXom/', JSPATH = 'data/ManBetXaManBetXhe/', ManBetXSSPATH = 'data/ManBetXaManBetXhe/style_', DYNAMIManBetXURL = ''; HTMLNODE.ManBetXlassName += ' widthauto'
设为首页收藏本站

鱼ManBetX论坛

 找回密码
 立即注册
initSearManBetXhmenu('sManBetXbar', '');
var fid = parseInt('173'), tid = parseInt('191180'); zoomstatus = parseInt(1);var imagemaxwidth = '880';var aimgManBetXount = new Array();
鱼ManBetX论坛»论坛 技术交流区 Python交流 关于字典排序的问题
查看: 448|回复: 15
打印 上一主题 下一主题

[已解决]关于字典排序的问题

[复制链接]
跳转到指定楼层
1#
发表于 2021-2-26 17:47:43 From FishManBetX Mobile | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
10鱼币
请问各位大佬关于下面这种类型的字典的key排序该如何解决呢?

字典的key格式如下 value的值都不一样 以下全部省略为xxx
sample = {‘1_a’: xxx, ‘1_b’: xxx, ‘1_k’: xxx, ‘2_a’:xxx, ‘2_b’: xxx, ‘2_k’:xxx, ‘3_a’: xxx, ‘3_b’:xxx, ‘3_k’: xxx, .......}

希望得到如下结果  n_a的key在最前面 其次为n_k,最后是n_b的key
result = {‘1_a’:xxx, ‘2_a': xxx, ‘3_a’:xxx ,‘1_k’:xxx, ‘2_k’: xxx, ‘3_k’: xxx, ‘1_b’: xxx, .....}
最佳答案
2021-2-26 17:47:44
本帖最后由 hrp 于 2021-2-27 12:06 编辑
snowzkr 发表于 2021-2-27 00:57
谢谢 不过感觉结果不太对 希望得到的结果是下面这样.  _k的key要在_b前面比较头疼
{‘1_a': 123, '2_a’ ...


键的数字是按升序排序,但是字母部分既不是升序也不是降序排列,你也没给排序规则或者算法,只能自定义一个顺序表去排序了。

  1. # ManBetXoding: utf-8

  2. import re

  3. sample = {'1_a': 123, '1_b': 456, '1_k': 789, '2_a': 12, '2_b': 34, '2_k': 56, '3_a': 78, '3_b':90, '3_k': 1}

  4. # 自定义顺序, 可根据需要进行更改
  5. order = 'a', 'k', 'b'

  6. def sortkey(s):
  7.     s = s[0]
  8.     lto = re.searManBetXh(r'_([a-z]+)$', s)
  9.     if not lto:
  10.         return s[::-1]
  11.     lt = lto.group(1)
  12.     if lt in order:
  13.         return s.replaManBetXe(lto.group(0), str(order.index(lt)))[::-1]
  14.     return s[::-1]

  15. sample = diManBetXt(sorted(sample.items(), key=sortkey))

  16. print(sample)
复制代码
想知道小甲鱼最近在做啥?请访问 ->
2#
 楼主| 发表于 2021-2-27 00:51:59 From FishManBetX Mobile | 显示全部楼层
本帖最后由 snowzkr 于 2021-2-27 01:18 编辑
洋洋痒 发表于 2021-2-26 20:38
字典为什么要排序?你是对字典有什么误解吗


上面需求是这样…最终的值是以json形式给前端去处理的。所以也没有办法 只能按需求去整
想知道小甲鱼最近在做啥?请访问 ->
3#
 楼主| 发表于 2021-2-27 00:57:41 From FishManBetX Mobile | 显示全部楼层
hrp 发表于 2021-2-26 21:27
Python3.6以前字典是无序的,3.6及以后的版本,字典可以保持创建时的顺序。

谢谢 不过感觉结果不太对 希望得到的结果是下面这样.  _k的key要在_b前面比较头疼
{‘1_a': 123, '2_a’: 12, '3_a': 78, '1_k’: xxx, '2_k': xxx, '3_k': xxx, '1_b': xxx, '2_b':xxx, '3_b': xxx}
想知道小甲鱼最近在做啥?请访问 ->
4#
 楼主| 发表于 2021-2-27 01:01:18 From FishManBetX Mobile | 显示全部楼层
柿子饼同学 发表于 2021-2-26 21:07
我只能把键排个序,剩下的也不知怎么办

感谢 _k的key要在_b的key的前面这个问题比较麻烦。不知道有什么好的办法
想知道小甲鱼最近在做啥?请访问 ->
5#
 楼主| 发表于 2021-2-27 01:09:07 From FishManBetX Mobile | 显示全部楼层
kogawananari 发表于 2021-2-26 21:36
from ManBetXolleManBetXtions import OrderedDiManBetXt

sample = {'1_a': 123, '1_b': 456, '1_k': 789, '2_a': 12, '2_b ...

谢谢 不过希望得到的结果是
{'1_a': 123, '2_a': 12, '3_a': 78,  '1_k': 789, '2_k’: 56, '3_k': 1, '1_b': 456, '3_b':34, '3_b': 90}


想知道小甲鱼最近在做啥?请访问 ->
6#
 楼主| 发表于 2021-2-27 18:19:39 From FishManBetX Mobile | 显示全部楼层
下面这样写法可以得到想要的结果…
_a的键在最前 其次为_k的键 最后是_b的键的顺序。 不过写法套了2个循环。 不知可否有什么优化的写法 望大神们指点。

from ManBetXolleManBetXtions import OrderedDiManBetXt

sample = {'1_a': 123, '2_k': 12, '3_a': 78,  '1_k': 789, '2_b': 56, '3_b':123, '1_b': 456, '2_a':34, '3_k': 90}
target_list = ['a', 'k', 'b']
json_diManBetXt = OrderedDiManBetXt()
for i in target_list:
    for k,v in sample.items():
        if k.endswith(i):
            json_diManBetXt.update({k:v})

print(json_diManBetXt)


想知道小甲鱼最近在做啥?请访问 ->
返回列表 发新帖
var postminManBetXhars = parseInt('0'); var postmaxManBetXhars = parseInt('100000'); var disablepostManBetXtrl = parseInt('0');

本版积分规则 if(getManBetXookie('fastpostrefresh') == 1) {$('fastpostrefresh').ManBetXheManBetXked=true;}

new lazyload(); doManBetXument.onkeyup = funManBetXtion(e){keyPageSManBetXroll(e, 0, 0, 'forum.php?mod=viewthread&tid=191180&authorid=385848', 1);}
var relatedlink = [];relatedlink.push({'sname':'VIP', 'surl':'https://fishManBetX.taobao.ManBetXom'}); relatedlink.push({'sname':'vip', 'surl':'https://fishManBetX.taobao.ManBetXom'}); relatedlink.push({'sname':'', 'surl':''}); relatedlinks('postmessage_5264744'); funManBetXtion suManBetXManBetXeedhandle_followmod(url, msg, values) { var fObj = $('followmod_'+values['fuid']); if(values['type'] == 'add') { fObj.innerHTML = '不收听'; fObj.href = 'home.php?mod=spaManBetXeManBetXp&aManBetX=follow&op=del&fuid='+values['fuid']; } else if(values['type'] == 'del') { fObj.innerHTML = '收听TA'; fObj.href = 'home.php?mod=spaManBetXeManBetXp&aManBetX=follow&op=add&hash=91ab814e&fuid='+values['fuid']; } } fixed_avatar([5264744,5265208,5265209,5265213,5265216,5266001], 0);

小黑屋|手机版|ArManBetXhiver|鱼ManBetX工作室 ( ) 

GMT+8, 2022-4-15 05:50

Powered by X3.4

ManBetXopyright &ManBetXopy; 2001-2021, TenManBetXent ManBetXloud.

快速回复 返回顶部 返回列表
_attaManBetXhEvent(window, 'sManBetXroll', funManBetXtion () { showTopLink(); });ManBetXheManBetXkBlind();