【发布时间】:2021-11-17 14:22:27
【问题描述】:
我正在尝试按属性对对象进行分组。我知道如何做一个,但如何包含几个属性,例如:
class Node:
def __init__(self, name1, name2, id_):
self.name1 = name1
self.name2 = name2
self.id_= id_
def __repr__(self):
return f"<{self.id_}>{self.name1}-{self.name2}"
l = [Node('WWA', 'KATO', 1), Node('WWA', 'POZ', 2), Node('SZCZ', 'GDN', 3), Node('GDN', 'BYD', 4), Node('BIA', 'OLS', 5), Node('LUB', 'WWA',6 )]
get_attr = attrgetter("name1")
l= [list(g) for k, g in groupby(sorted(l, key=get_attr), get_attr )]
结果:
[[<5>BIA-OLSZ],
[<4>GDN-BYD],
[<6>LUB-WWA],
[<3>SZCZ-GDN],
[<1>WWA-KATO, <2>WWA-POZ]]
我想按 name1 或 name2 分组并得到它:
[[<5>BIA-OLSZ],
[<4>GDN-BYD],<3>SZCZ-GDN],
[<1>WWA-KATO, <2>WWA-POZ, <6>LUB-WWA]]
【问题讨论】:
-
如果有另一个具有 LUB 属性的节点,您将如何对 LUB-WMA 进行分组?你会在“WMA”和“LUB”组中复制它,还是第一个属性有优先级,或者其他什么?
-
这是我想要得到的结果:[[BIA-OLSZ], [GDN-BYD], [SZCZ-GDN], [WWA -KATO, WWA-POZ], LUB-WWA]] 我想要具有共同名称1-名称1、名称2-名称2或名称1-名称2的对象
-
这已经很清楚了,我的问题是如果 LUB-GDN 在列表中,您会将它放在哪里?它会与 、 和 或与 分组,还是会导致 与 进入不同的组?
-
另外,您的意思是 LUB-WWA 位于前一个子列表中,还是您的目标真的是让它根本不在子列表中?您的预期结果:
[<1>WWA-KATO, <2>WWA-POZ], <6>LUB-WWA]与您的要求相矛盾。你的意思是[<1>WWA-KATO, <2>WWA-POZ, <6>LUB-WWA]]吗? -
对不起我的错误,应该是这样的:[[BIA-OLSZ], [GDN-BYD],SZCZ-GDN], [ WWA-加藤,WWA-POZ,LUB-WWA]]