gpt4 book ai didi

python - 按第一列中的值对数据进行分组

转载 作者:行者123 更新时间:2023-11-30 23:09:31 25 4
gpt4 key购买 nike

我正在尝试根据第一列的值对 2 列对象中的数据进行分组。我需要将这些数据放在列表中,以便之后可以对它们进行排序。我正在大量机器上使用 snmp 获取接口(interface)数据。在示例中我有 2 个接口(interface)。我需要按接口(interface)分组的数据,最好是在列表中。

我得到的数据在对象项中:

for i in item:
print i.oid, i.val

ifDescr lo
ifDescr eth0
ifAdminStatus 1
ifAdminStatus 1
ifOperStatus 1
ifOperStatus 0

我想将此数据按第一列中的值排序在列表中,如下所示:

我想在列表中获取这些数据,所以它看起来像这样:

列表=[[lo,1,1],[eth0,1,0]]

我的解决方案是如此肮脏和冗长,我很不好意思将其发布在这里,所以感谢任何帮助。

这是我的解决方案,以便您更好地了解我在说什么。我所做的是将每个接口(interface)数据放在基于 item.oid 的单独列表中,然后迭代 cpu 列表并将其与基于 item.iid 的内存和名称进行比较。最后,我将所有数据存储在 cpu 列表中,其中每个接口(interface)都是列表的一个元素。该解决方案有效,但对于我的需求来说太慢了。

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

有没有一种Python式的、简短且更快的方法来做到这一点?限制因素是我在具有 key=data 值的 2 列对象中获取数据。

最佳答案

不确定我是否遵循您的排序,因为我没有看到任何顺序,但要进行分组,您可以使用 defaultdictoid 进行字典分组对于重复键:

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)

关于python - 按第一列中的值对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31149781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com