python - 如何利用元組中某個資料或字典中某組key,對一個序列的資料進行排序?
黄舟
黄舟 2017-06-12 09:22:19
0
2
880

假設透過對海量的原始資料後分析得到這樣的資料:

[(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學習者快速成長!