- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
郑州Python培训班教你数据统计,分组的一些小技
郑州Python培训班教你数据统计,分组的一些小技巧在字典中将键映射到多个值上面
{b:?[4,?5,?6],
a:?[1,?2,?3]}有时候我们在统计相同key值的时候,希望把所有相同key的条目添加到以key为键的一个字典中,然后再进行各种操作,这时候我们就可以使用下面的代码进行操作:from collections import?defaultdict
d?=?defaultdict(list)
print(d)
d[a].append(1)
d[a].append(2)
d[a].append(3)
d[b].append(4)
d[b].append(5)
d[b].append(6)
print(d)
print(d.get(a))
print(d.keys())
print([d.get(i)?for?i?in?d])
这里是使用了collections中的方法,这里面还拥有很多有用的方法,我们有时间在继续进行深入了解。
上面代码运行结果:defaultdict(,?{})
defaultdict(,?{b:?[4,?5,?6],?a:?[1,?2,?3]})
[1,?2,?3]
dict_keys([b,?a])
[[4,?5,?6],?[1,?2,?3]]
我们将数据填入之后,相当于进行快速分组,然后遍历每个组就可以统计一些我们需要的数据。迅速转换字典键值对
data?=?{...}zip(data.values(),?data.keys())
data是我们的格式数据,使用zip后进行快速键值转换,然后可以使用max,min之类函数进行数据操作。通过公共键对字典进行排序
from operator import itemgetterdata?=?[
????{name:?bran,?uid:?101},
????{name:?xisi,?uid:?102},
????{name:?land,?uid:?103}
]
print(sorted(data,?key=itemgetter(name)))
print(sorted(data,?key=itemgetter(uid)))
数据格式就是data,我们想要对name或者uid进行排序我们就是用代码中的方法。运行结果:[{name:?bran,?uid:?101},?{name:?land,?uid:?103},?{name:?xisi,?uid:?102}]
[{name:?bran,?uid:?101},?{name:?xisi,?uid:?102},?{name:?land,?uid:?103}]
正如我们期望中的一样对列表中的多个字典根据某一字段进行分组
注意注意,在进行分组前要首先对数据进行排序处理,排序字段根据实际要求来选择。即将处理的数据:rows?=?[
????{name:?bran,?uid:?101,?class:?13},
????{name:?xisi,?uid:?101,?class:?11},
????{name:?land,?uid:?103,?class:?10}
]
期望处理结果:{
101:?[{name:?xisi,?class:?11,?uid:?101},{name:?bran,?class:?13,?uid:?101}],
103:?[{name:?land,?class:?10,?uid:?103}]
}
我们按照uid进行分组,这里只是演示,uid一般也不会重复。这个比较复杂一点,我们一部一步来分解。some?=?[(a,?[1,?2,?3]),?(b,?[4,?5,?6])]
print(dict(some))
结果:{b: [4, 5, 6], a: [1, 2, 3]}
这里我们的目的是将元组转换成字典,这个很简单,应该都能看懂。接着我们来下一步对待处理数据进行排序:data_one?=?sorted(rows,?key=itemgetter(class))
print(data_one)
data_two?=?sorted(rows,?key=lambda?x:?(x[uid],?x[class]))
print(data_two)
这里我们提供两种排序方式原理相同,只是样式稍有区别,第一种data_one是直接使用itemgetter,按照我们前面使用过得,直接按照某一字段进行排序,可是有时候我们会有另一种要求:先按照某一字段排序,当第一字段重复时,再按照另一字段排序。这时我们就用第二种方法,进行多字段值排序。
排序结果如下:[{name:?land,?class:?10,?uid:?103},?{name:?xisi,?class:?11,?uid:?101},?
您可能关注的文档
最近下载
- 2022年北京市(初中毕业学业考试)中考数学真题试卷(含详解).docx VIP
- 医疗机构环境卫生学监测.pptx
- 7-8 曲面及空间曲线的应用举例.ppt VIP
- 2024年中考语文名著阅读考试要点总结与精练 《鲁滨逊漂流记》.docx VIP
- 2024年高考政治时政专题 《经济工作会议》时政背景+理论解析+练习(含解析).docx
- “红旗杯”竞赛总题库-1班组长环境安全健康管理能力考试题库(附答案).docx VIP
- AQT 9011-2019 生产经营单位生产安全事故应急预案评估指南.docx
- 2024年全国高考理综试题带解析-全国卷1.pdf
- 浙江省杭州市临平区2022-2023学年七年级下学期期末历史与社会试题(无答案).docx VIP
- 静脉留置针所致静脉炎的预防与护理研究.docx VIP
文档评论(0)