python - 如何利用元组中某个数据或字典中某组key,对一个序列的数据进行排序?
黄舟
黄舟 2017-06-12 09:22:19
0
2
910

假设通过对海量的原始数据后分析得到这样的数据:

[(id,node,val)(id,node,val)...]
就是依次为 用户id,所在服务器,数值 这样的元组,然后要根据服务器分开,再依靠val大小进行排序,然后写入excel中。
或者产生[{"id":xxx,"node":xxx,"val":xxx},{"id":xxx,"node":xxx,"val":xxx}...]
如果是只有一组kv,可以通过sorted的方式进行排序,但是现在node的名称是未知的,这些服务器名每天都可以能会发生变化。当我获取到这样的数据后,如何根据服务器名称分开,再排序数据呢?
这里主要卡在,node本身的名称并不是固定的,比如你先创建n个列表,把相同节点的数据放进去,但你不知道要创建多少个列表。而且之后在将处理后的数据写入excel时,势必要用到循环。
这样循环套循环,而且无论是数据分类后,还是排布后的新数据组名称都不是确定的。即便使用exec命令也无法满足需要啊

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(2)
过去多啦不再A梦
from collections import defaultdict

d = defaultdict(list)
data = [(id,node,val),(id,node,val)...]

# 按node进行分组
for x in data:
    d[x[1]].append(x)
    
# 将分组数据依次写入excel
for _, v in d.iteritems():
    # 排序
    tmp = sorted(v, key=lambda x: x["val"], reverse=True/False)
    # 写入excel
    write_to_excel(tmp)

另外其实可以将数据按id, node, val 全部写入csv文件
通过linux的awk, uniq, sort 等命令工具写一个shell脚本, 也是很快的

还有关于你的海量数据究竟有多大, 在哪个数量级,没有明确, 如果数据量真的很大, 用上面的python代码内存不够用也是可能的, 这个需要你自己估算下

我想大声告诉你

如果我正确理解了你的需求的话,可以用字典,字典的键是node的名称,字典的值是由项组成的列表:

data = [{"id":xxx,"node":xxx,"val":xxx},{"id":xxx,"node":xxx,"val":xxx}...]

result = {}
for data_item in data:
    node_name = data_item["node"]
    if node_name in result.keys():
        result[node_name].append(data_item)
    else:
        result[node_name] = [data_item]

之后再根据键(服务器名称)取出字典中的每一项的值(就是数据列表),对其sort加lambda根据每一项中的某个值进行排序。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!