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

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

[(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根據每一項中的某個值進行排序。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板