python – 在for循环中对数据进行分组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在for循环中对数据进行分组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1922字,纯文字阅读大概需要3分钟。
内容图文
我需要循环遍历已排序的数据集,将该排序属性的所有结果分组为块,这些块对于该属性都具有相同的值.然后我在那块结果上运行一些操作.
对不起,这有点令人困惑,示例可能是描述我正在做的更好的方式:
我有一个像这样结构化的数据集,除了“数据”字符串实际上是对象并包含大量其他数据.
[ [1, "data1"], [1, "data2"], [2, "moredata"], [2, "stuff"],
[2, "things"], [2, "foo"], [3, "bar"], [4, "baz"] ]
我想要发生的是将数据分组为4个不同的函数调用:
process_data(1, ["data1", "data2"])
process_data(2, ["moredata", "stuff", "things", "foo"])
process_data(3, ["bar"])
process_data(4, ["baz"])
我最终得到的结构看起来像这样:
last_id = None
grouped_data = []
for row in dataset:
id = row[0]
data = row[1]
if last_id != id:
# we're starting a new group, process the last group
processs_data(last_id, grouped_data)
grouped_data = []
last_id = id
grouped_data.append(data)
if grouped_data:
# we're done the loop and we still have a last group of data to process
# if there was no data in the dataset, grouped_data will still be empty
# so we won't accidentally process any empty data.
process_data(last_id, grouped_data)
它有效,但看起来很笨拙.尤其需要使用last_id变量跟踪所有内容以及循环后第二次调用process_data.我想知道是否有人可以提供更优雅/更聪明的解决方案的任何建议.
我选择的语言是Python,但一般的解决方案很好.
解决方法:
itertools.groupby正是你想要的:
>>> data = [ [1, "data1"], [1, "data2"], [2, "moredata"], [2, "stuff"],
... [2, "things"], [2, "foo"], [3, "bar"], [4, "baz"] ]
>>>
>>> from itertools import groupby
>>> from operator import itemgetter
>>>
>>> def process_data(key, keydata):
... print key, ':', keydata
...
>>> for key,keydata in groupby(data, key=itemgetter(0)):
... process_data(key, [d[1] for d in keydata])
...
1 : ['data1', 'data2']
2 : ['moredata', 'stuff', 'things', 'foo']
3 : ['bar']
4 : ['baz']
通过排序列表传递组,以及关于列表中每个项目内的分组内容的关键功能.你得到一个(key,itemgenerator)对的生成器,如图所示传递给我的make-up process_data方法.
内容总结
以上是互联网集市为您收集整理的python – 在for循环中对数据进行分组全部内容,希望文章能够帮你解决python – 在for循环中对数据进行分组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。