2017-08-31 75 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

你能否解釋一下你在這裏如何做geeting。 –

+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