【问题标题】:Retrieving a specific set element in Python在 Python 中检索特定的集合元素
【发布时间】:2013-05-28 23:04:29
【问题描述】:

基本上这就是我想要做的:

我有一个要添加对象的集合。这些对象有自己的相等方法,并且一个集合不应该有一个元素等于集合中的另一个元素。但是,当尝试插入一个元素时,如果它等于另一个元素,我想记录这两个元素的合并版本。也就是说,对象具有在其相等方法中未考虑的“辅助”字段。添加完内容后,我希望元素的“辅助”字段包含我尝试添加的相同元素的所有“辅助”字段的组合。

我的想法是,好吧,在将元素添加到集合之前,请检查它是否已经在集合中。如果是这样,将其从集合中拉出,组合两个元素,然后将其放回。但是,Python 集合中的 remove 方法不返回任何内容,而 pop 方法返回任意元素。

我可以用 Python 中的集合做我想要做的事情吗,还是我在找错树(正确的树是什么?)

【问题讨论】:

    标签: python iteration combinations set


    【解决方案1】:

    听起来你想要defaultdict

    from collections import defaultdict
    D = defaultdict(list)
    D[somekey].append(auxfield)
    

    编辑: 要使用你的合并功能,你可以结合人们在cmets中给出的代码

    D = {}
    for something in yourthings:
        if something.key in D:
            D[something.key] = something.auxfield
        else:
            D[something.key] = merge(D[something.key], something.auxfield)
    

    【讨论】:

    • 值是多少(默认与否)?撇开set 可能无法提供必要的功能不谈,这里的映射在概念上似乎是错误的。
    • +1 之所以有效,是因为它提供了键的唯一性,如集合,但具有任意长的属性,如 Mala 请求的。我没有发现概念缺陷if key in D then: if not aux in D[key]: D[key].append[aux]
    • 谢谢!几个问题:(1)这与使用集合有类似的内存占用吗?我在低内存假设下工作(2)我将使用什么作为“somekey”?哈希? (3) 如果我的合并是一个函数,这仍然有效吗?附加值有点简化它,但我有一个合并(对象,对象)函数
    • 尝试显示一些代码,您的问题对于具体答案来说有点抽象。
    • @Mala,如果这是您的等式运算符,您可以使用哈希作为键。在这种情况下,如果您使用自己的合并功能,您甚至不需要 defaultdict。您可以使用D = {}D[obj.Hash()] = merge(D[obj.Hash()], obj) 或类似的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多