2017-07-15 19 views
2

私はmy_dictに値を設定していますが、私はxも持っています。交差点集合

xのすべての数字を含むmy dictのセットでリストを返す必要があります。 my_dictに設定した場合、すべての数字がxに含まれていないため、返信したくありません。

私は交差点(&)を使用しますが、すべてのセットをmy_dictに返します。

my_dict = {1: {1,2,3,4,5}, 

     2: {1,2,3,7,8}, 

     3: {1,2,3,4} 

     } 

x = {1,2,5} 
new_list = [] 


for i in my_dict: 
    if my_dict[i] & x: 
     new_list.append(i) 
print(new_list) 

出力:

[1, 2, 3] 

私は、交差点は、xのすべての値を意味し、xは辞書にセットに存在しているになると代わり[1, 2, 3]

+0

サンプルの例では、整数のキーを – PRMoureu

答えて

2

[1]を受信する必要があります。

for i in my_dict: 
    if (my_dict[i] & x)==x: 
     new_list.append(i) 
print(new_list) 

編集:また

for i in my_dict: 
    if x.issubset(my_dict[i]): 
     new_list.append(i) 
print(new_list) 
+0

で置き換えるか、よりコンパクトにしてください: 'print([k for k、my_dict.items()ならばv&x == x])' – janos

+3

または単に ' x.issubset(my_dict [i]) 'です。中間セットを作成する必要はありません。 –

+0

はい、あなたはリストの理解をすることができますが、OPが望む形式で答えを与える方が良いです。 –

1

を行うことができます以下のコメントで示唆されているように、私はあなたではなく&演算子を使用するよりも、set.issuperset方法を使用することをお勧め。なぜあなたが望むものを正確に行うためのメソッドが存在するときに、複数の演算子を組み合わせるのですか?

new_list = [] 
for i in my_dict: 
    if my_dict[i].issuperset(x): 
     new_list.append(i) 

Iは、通常、リスト内包でこれを書くだろう注:

newlist = [key for key, value in my_dict.items() if value.issuperset(x)] 
1

my_dict値とXとの間のインターセクションでは、xはmy_dict値のサブセットでなければならないことを意味xに等しくなければなりません

my_dict = {1: {1,2,3,4,5}, 
      2: {1,2,3,7,8}, 
      3: {1,2,3,4}} 

x = {1,2,5} 

new_list = [] 

for i,j in my_dict.items(): 
    if x.issubset(j): 
     new_list.append(i) 

print(new_list) 
0

セットの全体が別のセット内で、素敵な(私のopinonで)方法はを使用することであるかどうかをチェックしますと>演算子は、数学では "superset of"と同等に動作するようにオーバーライドされ、set.issupersetメソッドと同等です。この方法の利点は、>=<=の演算子が非厳密なスーパーセットをチェックするために自然に利用できることです。ここで

はそれをやってかなりidomatic方法です:

new_list = [] 
for key, value in my_dict.items(): 
    if value >= x: 
     new_list.append(key) 

あなたの元のコードに問題がとき、それは2つのセットの間の任意の交差点がある場合、彼らもただ一つの要素を共有する。すなわち、かどうかをチェックですチェックしているセットにx: setのすべてが含まれているかどうか確認したいと思うようです。

他の手順が必要な場合を除き、コードを簡素化したい場合は、リストcompehensionを使用することもお勧めします。

new_list = [key for key, value in my_dict.items() if value >= x] 
0

これは、issubset機能を使用して解決することもできます。ここでは例です:

for i in my_dict: 
    if x.issubset(my_dict[i]): 
      new_list.append(i) 

出力:この例では[1]

は、我々は他の単語xに(辞書内のすべてのキーと値のペアの値は、xのスーパーセットであるかどうかをチェックしている所属〜my_dict[i])、それが当てはまる場合は、インデックスを目的のリストに追加するだけです。