我尝试根据第一列的值对来自2列对象的数据进行分组。我需要列表中的这些数据,以便我可以在之后对它们进行排序。我在大量机器上使用snmp获取接口数据。在示例中,我有2个接口。我需要按接口分组的数据,最好是在列表中。
我得到的数据是在对象项目中:
for i in item:
print i.oid, i.val
ifDescr lo
ifDescr eth0
ifAdminStatus 1
ifAdminStatus 1
ifOperStatus 1
ifOperStatus 0
我想将这些数据按照第一列中的值按列表排序,如下所示:
我想将这些数据放在一个列表中,所以它看起来像这样:
list = [[lo,1,1],[eth0,1,0]]
解决方案我有这么脏,很长,我很尴尬地把它贴在这里,所以任何帮助都会受到赞赏。
这是我的解决方案,让您更好地了解我所谈论的内容。我所做的是将每个接口数据放在基于item.oid的单独列表中,然后通过cpu列表进行迭代,并将其与基于item.iid的内存和名称进行比较。最后,我在cpu列表中有所有数据,其中每个接口都是列表的元素。这个解决方案有效,但对我的需求来说太慢了。
cpu=[]
memory=[]
name=[]
for item in process:
if item.oid=='ifDescr':
cpu.append([item.iid, int(item.val)])
if item.oid=='ifAdminStatus':
memory.append([item.iid, int(item.val)])
if item.oid=='ifOperStatus':
name.append([item.iid, item.val])
for c in cpu:
for m in memory:
if m[0]==c[0]:
c.append(m[1])
for n in name:
if n[0]==c[0]:
c.append(n[1])
cpu=sorted(cpu,key=itemgetter(1),reverse=True) #sorting is easy
有没有pythonic,short和更快的方法吗?限制因素是我使用key = data值获取2列对象中的数据。
答案 0 :(得分:2)
我不确定是否按照您的排序方式进行排序,因为我没有看到任何订单,但是您可以使用oid
data = """ifDescr lo
ifDescr eth0
ifAdminStatus 1
ifAdminStatus 1
ifOperStatus 1
ifOperStatus 0"""
from collections import defaultdict
d = defaultdict(list)
for line in data.splitlines():
a, b = line.split()
d[a].append(b)
print((d.items()))
[('ifOperStatus', ['1', '0']), ('ifAdminStatus', ['1', '1']), ('ifDescr', ['lo', 'eth0'])]
对重复键使用for i in item:
d[i.oid].append(i.val)
分组进行分组:
func openEachFile(inDirectory path: String) {
let subs = try! FileManager.default.subpathsOfDirectory(atPath: path)
let totalFiles = subs.count
print(totalFiles)
for sub in subs {
if sub.hasPrefix(".DS_Store") {
//a DS_Store file
}
else if sub.hasSuffix(".xcassets") {
//a xcassets file
}
else if (sub as NSString).substring(to: 4) == ".git" {
//a git file
}
else if sub.hasSuffix(".swift") {
//a swift file
}
else if sub.hasSuffix(".m") {
//a objc file
}
else if sub.hasSuffix(".h") {
//a header file
}
else {
// some other file
}
let fullPath = (path as NSString).appendingPathComponent(sub)
}
}
使用您的代码只需使用以下属性:
typedef NS_ENUM(NSInteger, TabataStates) {
TabataStatesIDLE
TabataStatesSTARTING,
TabataStatesEXERCISe,
TabataStatesRELAXATION
};
答案 1 :(得分:1)
Pandas是处理数据的好方法。这是一个快速示例代码。查看官方网站了解更多信息。
# Python script using Pandas and Numpy
from pandas import DataFrame
from numpy import random
# Data with the dictionary keys defining the columns
data_dictionary = {'a': random.random(5),
'b': random.random(5)}
# Make a data frame
data_frame = DataFrame(data_dictionary)
print(data_frame)
# Return an new data frame with a sorted first column
data_frame_sorted = data_frame.sort_index(by='a')
print(data_frame_sorted)
如果您安装了大熊猫,这应该会运行。如果您对安装pandas没有任何线索,请获取“anaconda python发行版”。