【问题标题】:Intersection of Object Attributes in PythonPython中对象属性的交集
【发布时间】:2016-01-05 19:53:06
【问题描述】:

所以我做了两组对象,就像这样。

class 4digits:
    def __init__(self, value):
        self.value = value
        self.first = (value - (value % 100)) / 100
        self.last = value % 100

这些都是 4 位数字对象,所以它会像......

object.value = 1234
object.first = 12
object.last = 34

如果我有 2 个集合 set1 和 set2,我想更新 set1 和 set2 以仅包含 set1 具有与 set2 的第一个属性匹配的最后一个属性的对象。

比如... set1 中的 1234 将匹配 set 2 中的 3456。

我可以很容易地将其作为一个列表而不是一个集合来执行,但是如果我能弄清楚过程,那么一个集合感觉会更有效率,但不确定如何返回对象属性的交集。任何帮助。

已编辑:因为我被要求提供代码,而我的假设与我实际所做的并不完全相同。

感谢 Jez,我得到了这个答案:

def lastinfirst(list1, list2):
    firsts = set( l2.first for l2 in list2)
    newlist1 = [ l1 for l1 in list1 if l1.last in firsts]
    return newlist1

def firstinlast(list1, list2):
    lasts = set( l1.last for l1 in list1)
    newlist2 = [ l2 for l2 in list2 if l2.first in lasts]
    return newlist2

【问题讨论】:

  • 我认为您需要显示更多代码来帮助我们理解您的问题。由于我们并不真正知道haverooms.boroughwantrooms.borough 的类型,这使问题变得更加困难。
  • 如果您不想“蛮力”执行此操作,则必须实现与 DB index 相同的想法,这意味着,每当有新人被添加到 haveroomswantrooms 插入还将更新一个额外的数据结构,以防此人是 borough。这样,您可以在寻找匹配项时仅对“相关”人员进行快速迭代。

标签: python object set intersection


【解决方案1】:

如果我正确理解了你想要什么,应该这样做:

# Get the set of unique boroughs in which people want rooms:
wantedboroughs = set( w.borough for w in wantrooms )

# Get all records for people who have rooms in those boroughs:
result = [ h for h in haverooms if h.borough in wantedboroughs ]

好吧,现在您已将问题编辑为根本与房间和行政区无关。但也许您可以概括此处举例说明的原则。

【讨论】:

  • 是的,我想我可以概括一下。这就是想法,只想要一般示例,以便我可以针对我的特定问题使用它,而且我认为我给出的示例更容易理解。到目前为止,它似乎工作正常。
  • 我用你的概念解决了这个问题,制作了 2 个功能。在上面的答案中编辑。
  • Fwiw 我认为您在将其归结为假设方面做得很好:您的第一个问题比第二个问题更容易理解,至少对我而言。但是,是的,在 SO 中存在这样的原则,即如果您不展示自己是如何尝试解决问题的,那么问题是不受欢迎的。
猜你喜欢
  • 2020-03-31
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2014-03-15
相关资源
最近更新 更多