python - Bagaimana untuk mengisih urutan data menggunakan data tertentu dalam tuple atau set kunci tertentu dalam kamus?
黄舟
黄舟 2017-06-12 09:22:19
0
2
948

Andaikan data tersebut diperoleh melalui analisis pasca data mentah besar-besaran:

[(id,node,val)(id,node,val)...]
ialah tuple id pengguna, pelayan dan nilai mengikut tertib, kemudian asingkan mengikut pelayan, dan kemudian isi berdasarkan val saiz, dan kemudian Tulis untuk cemerlang.
Atau jana [{"id":xxx,"node":xxx,"val":xxx},{"id":xxx,"node":xxx,"val":xxx}...]
Jika ia adalah Hanya terdapat satu set kv yang boleh diisih mengikut diisih, tetapi nama nod tidak diketahui sekarang, dan nama pelayan ini mungkin berubah setiap hari. Selepas saya memperoleh data tersebut, bagaimanakah saya boleh mengasingkan dan mengisih data mengikut nama pelayan?
Masalah utama di sini ialah nama nod itu sendiri tidak tetap Sebagai contoh, anda mula-mula membuat n senarai dan meletakkan data nod yang sama ke dalamnya, tetapi anda tidak tahu berapa banyak senarai yang perlu dibuat. Dan apabila menulis data yang diproses untuk cemerlang kemudian, gelung pasti akan digunakan.
Ini ialah kitaran dalam kitaran, dan nama kumpulan data baharu tidak ditentukan sama ada selepas data dikelaskan atau selepas ia disusun. Walaupun menggunakan arahan exec tidak dapat memenuhi keperluan

黄舟
黄舟

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

membalas semua(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)

Selain itu, anda sebenarnya boleh menulis semua data ke dalam fail csv dengan id, nod, val
Menulis skrip shell melalui awk, uniq, sort dan alatan arahan Linux juga sangat pantas

Selain itu, tidak jelas berapa besar data besar anda dan susunan magnitudnya Jika jumlah data benar-benar besar, kemungkinan memori kod python di atas tidak mencukupi sendiri

我想大声告诉你

Jika saya memahami keperluan anda dengan betul, anda boleh menggunakan kamus Kunci kamus ialah nama nod dan nilai kamus ialah senarai yang terdiri daripada item:

.
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]

Kemudian keluarkan nilai setiap item dalam kamus (iaitu senarai data) mengikut kekunci (nama pelayan), dan isikannya dengan menambah lambda untuk mengisihnya mengikut nilai tertentu dalam setiap item.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan