【问题标题】:Python List of Tuples - Problems with intersection and unionPython 元组列表 - 交集和并集的问题
【发布时间】:2013-07-08 18:53:30
【问题描述】:

问题:

我想通过 URL 构建一个查询生成器。返回是元组列表,包含参与者和参与者数据。在数据库中存在数百个具有唯一 ID 的参与者。每个参与者都可以有各种参与者数据。每个活动注册都会在数据库中创建一个新的参与者数据,通过电子邮件与参与者相关。

例如:include|eventid|is|17||include|eventid|is|13__include|unsubscribed|is|True

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

1。包括|事件ID|是|17||包括|事件ID|是|13 2. include|unsubscribed|is|True

或的

从第一个 AND 条件开始: 1. 包含|eventid|是|17 2. 包含|eventid|是|13

结果语法:

[(participant_id, partidipantdata_id), (participant_id, partidipantdata_id), ...], 
例如:[(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-查询(participant_id、participantdata_id)? --> 查询各种事件需要participant_id,查询未订阅的各种事件(存储在participantdata中的信息)需要partitiondata_id
两者都需要:participant_id和participantdata_id来获得最终结果查询。



问题:
例如。查询:事件 #17 AND 事件 #13 AND 所有已取消订阅此事件的 ParticipantDatas。 (结果:3 个查询:#13 的参与者以及#17 的参与者以及所有对系统中的某些事件取消订阅的参与者)。
所以我可以将 17 和 13 的参与者 ID 相交。但是,要获得此事件的所有取消订阅,我必须将事件 #13 的参与者数据 ID 与事件 #17 和取消订阅相交。但这不起作用,因为每次注册事件都会创建参与者的新参与者数据。访问 #13 和 #17 的参与者将不匹配。那就是问题所在!

· 问题来自与查询(与或查询的结果相交)。

非常感谢! 克里斯

【问题讨论】:

  • 请提供更多包含123、1240等的样本数据

标签: python list tuples union intersection


【解决方案1】:

为每条匹配的记录返回一个set 的 UID。然后您可以使用联合和交集函数中内置的set-objects。

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

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

【讨论】:

  • 这是行不通的......因为例如取消订阅参与者数据 ID 是必需的。
  • @user2543694:它也适用于这种情况。请解释不清楚的地方,我会改进答案。
  • 查询的最终结果也必须包含参与者数据。查询后我需要此信息,但我无法通过参与者 ID 获取此信息。参与者 ID 可以有多个参与者数据 ID ...因此无法获得所需的参与者数据 ID
  • @user2543694:好的,所以唯一结果不是参与者 ID。从你的问题来看,这并不明显。关键是您制作了一组唯一 ID,其中每个唯一 ID 响应一个可能的结果。 (participantid,participantdataid) 的元组将用作唯一 ID,所以这不是问题。
  • @user2543694:如果具体是什么?这真的很微不足道。如何制作联合和交叉点在我链接到的文档中。 (你使用|&
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
相关资源
最近更新 更多