考虑这种情况:团队负责人将任务分配给团队成员。任务从周一到周六。团队成员始终无法使用。成员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
}
非常感谢。
答案 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