Python元组列表 - 交集和并集的问题

时间:2013-07-05 10:18:43

标签: python list tuples union intersection

问题:

我想通过URL构建一个Query-Builder。返回是元组列表,包含参与者和参与者数据。在数据库中存在数百个具有唯一ID的参与者。每个参与者都可以拥有各种参与者数据。每个事件注册都在数据库中创建一个新的参与者数据,通过电子邮件与参与者相关联。

e.g.: include|eventid|is|17||include|eventid|is|13__include|unsubscribed|is|True

我将其分为AND和OR查询。
AND的

1. include|eventid|is|17||include|eventid|is|13
2. include|unsubscribed|is|True

OR的

From first AND Condition: 
1. include|eventid|is|17
2. include|eventid|is|13

结果 - 语法:

[(participant_id, partidipantdata_id), (participant_id, partidipantdata_id), ...], 
e.g: [(123,1240), (123,959), (123,1124), (123,1450), (134, 1670), (156,1950), (123,1450), (156,2000), (220,2100), (234, 1754), (156,1121), (278,1556), (281,1671), (278,1771), (156,2111), (312,2254), (289,967), (278, 2178)]

问题:
·如何正确组合(联合)OR-Queries(participant_id,participantdata_id)? - >对各种事件的查询需要participant_id,对具有未订阅的各种事件(存储在参与者数据中的信息)的查询需要参与者数据_用于需要两者:participant_id和participantdata_id以获得最终结果查询。



问题:
例如。查询:事件#17和事件#13以及已从此事件取消订阅的所有ParticipantDatas。 (结果:3个查询:#13的参与者以及排除系统中某些事件的#17和alle参与者)。
所以我可以在17和13的participant_id之间进行交集。但是为了得到这个事件的所有unsubs,我必须进行事件#13的参与者数据的交集和事件#17和unsubs。但这不起作用,因为每次事件注册都会创建一个参与者的新参与者数据。访问#13和#17的参与者将不匹配。那就是问题所在!

·问题伴随着AND-Queries(与OR-Queries的结果相交)。

非常感谢! 克里斯

1 个答案:

答案 0 :(得分:1)

为每个匹配的记录返回set个UID。然后,您可以使用set - 在union和intersection函数中构建的对象。

UID必须对每个可能的结果都是唯一的。在这种情况下,一个可能的结果是特定的参与者数据,它将由(参与者ID,参与者数据ID)唯一标识,因此您可以使用它,这意味着您只需返回set而不是{{ 1}}。

元组不是这里最有效的数据类型,但我不认为这对你的情况很重要。