2016-11-30 53 views
0

我有一个玩具列表,每个玩具都有一个与之相关的颜色。每个玩具都是独一无二的,但其中一些玩具可能具有相同的颜色。我想把所有的玩具按照他们的颜色分组,并把它们放入子列表中。所以基本上,我想要一个按颜色分组的所有玩具的列表。基于Python中的属性创建子列表

我已经看到了一些关于如何用布尔值或有限数量的值来完成此任务的文章,但我希望能够用任何颜色或者任何字符串来完成此操作。

+0

你应该张贴您的数据结构代码 – Navidad20

+0

@ Navidad20我想过这个问题,但它带有一个字段是一个类称为颜色的字符串。你真的需要一个可视化的吗? – Nealon

回答

2

试试这个:

from collections import defaultdict 

toys_color = defaultdict(list) 
for toy in toys: 
    toys_color[toy.color].append(toy) 
list_toys_color = list(toys_color.items()) 

如果你不想每个组的颜色,使用该行:

list_toys_color = list(toys_color.values()) 
+0

这与我之前想要做的很不一样,但那是有效的。谢谢。 – Nealon

1

试试这个:

colors = set([toy.color for toy in toys]) 
groups = [ [toy for toy in toys if toy.color == color] for color in colors] 

它应该适用于曾经出现在任何玩具上的任何类型的颜色。 不太优雅,但更具扩展性的解决方案是不那么多次迭代玩具:

colored = {} 
for toy in toys: 
    l = colored[toy.color] 
    if len(l) == 0: 
     l = [] 
    l.append(toy) 
+0

这看起来像一个非常干净和简单的解决方案。你认为这可能与缩放有关吗? – Nealon

+2

这将肯定会有缩放问题,因为您正在遍历每种颜色的所有玩具 – Navidad20

+0

@Navidad20是正确的,我刚编辑以提供更有效的解决方案。 –