【问题标题】:Set of items based on a list of tuples基于元组列表的项目集
【发布时间】:2020-06-05 00:43:52
【问题描述】:

根据元组的第一个元素从元组列表中创建一个集合。

[(name1, 1), (name2, 2), (name1, 3)] 应该返回 [(name1, 1), (name2, 2)]

【问题讨论】:

    标签: python list set tuples


    【解决方案1】:

    假设:

    l = [('name1', 1), ('name2', 2), ('name1', 3)]
    

    两个班轮:

    s = set()
    r = [s.add(i[0]) or i for i in l if i[0] not in s]
    

    结果:

    [('name1', 1), ('name2', 2)]
    

    【讨论】:

    • 这不打印元组,只打印键。
    • @JossieCalderon 你什么意思?你用print(s)而不是print(r),对吧?
    【解决方案2】:

    简单有效的解决方案:

    list_of_tuples = [('name1', 1), ('name2', 2), ('name1', 3)]
    output = []
    seen_names = set()  # just typing {} initializes a dictionary
    for tuple in list_of_tuples:
        name = tuple[0]
        if name not in seen_names:
            output.append(tuple)
            seen_names.add(name)
    print(output)
    

    这将打印所需的输出,[('name1', 1), ('name2', 2)]

    【讨论】:

    • 这是 6 月 5 日的三个答案中最好的一个。但是使用字典更简单。
    【解决方案3】:
    someList = [('x', 1), ('y', 2), ('x', 3)]
    s = set()
    for item in someList:
        if not any(item[0] in element for element in s):
            s.add(item)
    

    你的意思是这样的吗?

    【讨论】:

    • 不应该是item[0] == element
    【解决方案4】:

    您可以只使用 group by 模式的修改版本。由于我们只想要第一个值,我们可以使用dict.setdefault

    input_ = [("name1", 1), ("name2", 2), ("name1", 3)]
    
    grouper = {}
    for key, value in input_:
        grouper.setdefault(key, value)
    
    print(list(grouper.items()))
    # [('name1', 1), ('name2', 2)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多