python - Wie sortiere ich eine Datensequenz mithilfe bestimmter Daten in einem Tupel oder eines bestimmten Schlüsselsatzes in einem Wörterbuch?
黄舟
黄舟 2017-06-12 09:22:19
0
2
914

Angenommen, solche Daten werden durch Nachanalyse umfangreicher Rohdaten gewonnen:

[(id,node,val)(id,node,val)...]
ist ein Tupel aus Benutzer-ID, Server und Wert in der Reihenfolge, die dann nach dem Server getrennt und dann nach dem Wert sortiert wird Größe und dann „In Excel schreiben“.
Oder generieren Sie [{"id":xxx,"node":xxx,"val":xxx},{"id":xxx,"node":xxx,"val":xxx}...]
Wenn ja Es gibt nur eine Reihe von KVS, die nach Sortierung sortiert werden können, aber die Namen der Knoten sind derzeit unbekannt und diese Servernamen können sich täglich ändern. Nachdem ich solche Daten erhalten habe, wie kann ich die Daten nach dem Servernamen trennen und sortieren?
Das Hauptproblem besteht darin, dass der Name des Knotens selbst nicht festgelegt ist. Sie erstellen beispielsweise zunächst n Listen und geben die Daten derselben Knoten darin ein, wissen aber nicht, wie viele Listen Sie erstellen sollen. Und wenn die verarbeiteten Daten später in Excel geschrieben werden, wird zwangsläufig eine Schleife verwendet.
Dies ist ein Zyklus innerhalb eines Zyklus, und der Name der neuen Datengruppe wird weder nach der Klassifizierung noch nach der Anordnung der Daten bestimmt. Selbst die Verwendung des Befehls exec kann die Anforderungen nicht erfüllen

黄舟
黄舟

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

Antworte allen(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根据每一项中的某个值进行排序。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!