2016-11-30 7 views
0

私はおもちゃのリストを持っており、それらのおもちゃのそれぞれには色が関連付けられています。それぞれのおもちゃはユニークですが、その中には同じ色を持つものもあります。私はすべてのおもちゃを色でグループ化し、それらをサブリストに入れたいと思います。だから本質的に、私は色でグループ化されたすべてのおもちゃのリストが欲しい。Pythonのプロパティに基づいてサブリストを作成する

ブール値または有限数の値でこれを行う方法については、いくつかの記事がありますが、どの色でも、すべての文字列で行うことができます。

+0

あなたは、私はそれについて考えNavidad20 @あなたのデータ構造のコード – Navidad20

+0

を投稿する必要がありますが、ある一つのフィールドを持つクラス: 少ないエレガントが、よりスケーラブルなソリューションを何度もおもちゃを反復しないだろう'string'はcolorと呼ばれます。それは本当に視覚化が必要ですか? – 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が正しいです。より効率的なソリューションを提供するために編集しました。 –

関連する問題