关于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下可以运行的脚本,分开来写好做比较一下,谢谢~ 展开
广州 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下可以运行的脚本,分开来写好做比较一下,谢谢~ 展开
1个回答
展开全部
#!/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'))
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询