关于python当中字典值排序的问题

如题,有以下数据广州2014-11-22苹果996深圳2014-11-23香蕉1075杭州2014-11-24番茄543北京2014-11-25橘子824利用字典,保存将... 如题,有以下数据
广州 2014-11-22 苹果 9 96
深圳 2014-11-23 香蕉 10 75
杭州 2014-11-24 番茄 5 43
北京 2014-11-25 橘子 8 24

利用字典,保存将地名作为键,后面的两个数字作为值,根据倒数第一列和倒数第二列的数值分别排序,输出2.txt
杭州 2014-11-24 番茄 5 43
北京 2014-11-25 橘子 8 24
广州 2014-11-22 苹果 9 96
深圳 2014-11-23 香蕉 10 75

3.txt
北京 2014-11-25 橘子 8 24
杭州 2014-11-24 番茄 5 43
深圳 2014-11-23 香蕉 10 75
广州 2014-11-22 苹果 9 96
这两个结果,麻烦大神们帮助一下写两个在2.6下可以运行的脚本,分开来写好做比较一下,谢谢~
展开
 我来答
tim_spac
2014-11-29 · TA获得超过3628个赞
知道大有可为答主
回答量:1804
采纳率:100%
帮助的人:2013万
展开全部
#!/usr/bin/env python
# coding: utf-8
#
# author: Tim Wang
# date: Nov., 2014
# filename: baidu/qa3.py

"""以下代码仅提供扩展参考的方法,在2.7版本下可运行。"""

import re


def parser(dataserial, patt, keyname, *evalattrs):
    """对给定的dataserial数据序列,用patt进行正则解析
        对指定的evalattrs进行值转换,
        以其中的keyname为字典键值,
    """
    collector = {}
    for matched in filter(None, map(patt.match, dataserial)):
        data = matched.groupdict()
        for attr in evalattrs:
            data[attr] = eval(data[attr])
        collector[data.get(keyname)] = data
    return collector


def iterdictsort(dictdatas, sortattr):
    for v in sorted(dictdatas.values(),
                    key=lambda v: v.get(sortattr)):
        yield v


context = u"""
广州        2014-11-22    苹果    9    96
深圳        2014-11-23    香蕉    10    75
杭州        2014-11-24    番茄    5    43
北京        2014-11-25    橘子    8    24
"""
patt = re.compile(r"""^
                  (?P<locale>\S+)
                  \s+
                  (?P<date>\S+)
                  \s+
                  (?P<product>\S+)
                  \s+
                  (?P<qty>\d+)
                  \s+
                  (?P<amount>\d+)
                  \s*$""", re.I|re.U|re.X)
fmt = u"{locale} {date} {qty:4} {amount:8}"
datas = parser(context.splitlines(), patt, "locale", "qty", "amount")
print "="*32
print "\n".join(fmt.format(**data)
                for data in iterdictsort(datas, 'qty'))
print "="*32
print "\n".join(fmt.format(**data)
                for data in iterdictsort(datas, 'amount'))
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式