2017-08-31 13 views
-1

このシナリオについて考える:チームリーダーがチームメンバーにタスクを割り当てます。タスクは月曜日から土曜日までです。チームメンバーは常に利用可能ではありません。メンバーaは1,3でフリーではなく、bは1,5でなくcは3ではありません...メンバーのスケジュールはデータベースに保存されており、SQLAlchemyを使用して取得します。 session.query(名前、free_date)Z = Y - Xのようなものを得るにはどうすればいいですか?感謝

クエリXは

[(a,1), 
(a,3), 
(b,1), 
(b,5), 
(c,3), 
    ... ] 

彼は無料ではないことをメンバーと日を含むシーケンスYは、タスクは、私が取得できますか

Y=(1,2,3,4,5,6) 

が必要であることを日が含まれていますシーケンスなどZ = YX。メンバーに割り当てられた日

{ 
a 2,4,5,6   
b 2,3,4,6   
c 1,2,4,5,6  
} 

ありがとうございました。

+0

ここでどのようにジエットしているのか教えてください。 –

+0

申し訳ありませんが、私の英語は十分ではありません。私はなぜZを取得したいのですか? – David

+1

私は、Zが何を表しているかを意味しています。 –

答えて

1

あなたは、いくつかのような意味:ここで

In []: 
r = {} 
for m, n in X: 
    r.setdefault(m, set()).add(n) 
{k: [x for x in Y if x not in v] for k, v in r.items()} 

Out[]: 
{'a': [2, 4, 5, 6], 'b': [2, 3, 4, 6], 'c': [1, 2, 4, 5, 6]} 
0

は別の方法である、あなたは意味

from collections import defaultdict 

d = defaultdict(list) 

map(lambda x: d[x[0]].append(x[1]), X) 

>> defaultdict(list, {'a': [1, 3], 'b': [1, 5], 'c': [3]}) 

f = {k: list(set(Y.get(k)).difference(set(d.get(k)))) for k in d.iterkeys()} 

>> {'a': [2, 4, 5, 6], 'b': [2, 3, 4, 6], 'c': [1, 2, 4, 5, 6]} 
+0

副作用のために関数演算 'map'を使うのはうんざりしているようです。 – AChampion

+0

それはちょっと変だった、私は創造的だった笑 –

0

は、a、b及びcに現れるタプルYから番号を削除していますか?次に試してみることができます:

X = [('a',1),('a',3),('b',1),('b',5),('c',3)] 
Y = [1,2,3,4,5,6] 

a = [] 
b = [] 
c = [] 

for tmp in X: 
    if tmp[0] == 'a': 
     a.append(tmp[1]) 
    elif tmp[0] == 'b': 
     b.append(tmp[1]) 
    elif tmp[0] == 'c': 
     c.append(tmp[1]) 

Z = {'a':[x for x in Y if x not in a], 
    'b':[x for x in Y if x not in b], 
    'c':[x for x in Y if x not in c]} 
print Z 
関連する問題