我怎样才能得到像Z = Y-X那样的东西?谢谢

时间:2017-08-31 01:49:41

标签: python

考虑这种情况:团队负责人将任务分配给团队成员。任务从周一到周六。团队成员始终无法使用。成员a在1,3上不是免费的,而b不是1.5,而c不是3,...成员的时间表存储在数据库中,我将使用SQLAlchemy获取它。 session.query(name,free_date)

查询X包含成员和他不自由的日子

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

序列Y包含任务需要的日期

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

如何获得序列或类似Z = Y-X。分配给成员的日期

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

非常感谢。

3 个答案:

答案 0 :(得分: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]}

答案 1 :(得分: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]}

答案 2 :(得分: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