在Python中基于属性创建子列表

时间:2016-11-30 15:07:58

标签: python list comparison

我有一个玩具清单,每个玩具都有与之相关的颜色。每个玩具都是独一无二的,但其中一些可能具有相同的颜色。我想按照颜色将所有玩具分组并将它们放入子列表中。基本上,我想要一个按颜色分组的所有玩具的清单。

我已经看过一些关于如何使用布尔值或有限数量的值进行此操作的帖子,但我希望能够使用任何颜色,或者更确切地说,任何字符串。

2 个答案:

答案 0 :(得分: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())

答案 1 :(得分:1)

试试这个:

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

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

var attachmentsList = new List<RootObject>();

FileInfo[] files = dinfo.GetFiles();
var rootObject = new RootObject {  
                                    id = 1, 
                                    name = "Folder1", 
                                    children = new List<Child>()
                                };

foreach (FileInfo file in files)
{
      rootObject.children.Add(new Child { id = i + 1, file.Name });
      i++;
}

attachmentsList.Add(rootObject);