2016-11-30 42 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是正確的,我剛編輯以提供更有效的解決方案。 –