【问题标题】:Getting a list of tuples that contain the same string获取包含相同字符串的元组列表
【发布时间】:2021-10-11 01:02:23
【问题描述】:

天 = ['星期五', '星期一']

val1 = (('Friday, 23,4), ('Monday', 233,4), ('enjf', 33,2))

val2 = (('星期五, 3,4), ('星期一', 33,2))

所以上面的只是一个例子。我想要做的是我想得到一个包含相同字符串的两个元组的总列表。

所以对于上面的例子,我期待 [('Friday, 23,4)('Friday, 3,4)] 如果我想要 'Friday' 的元组。 (这只是一个例子,我并不是想找出代码让我得到上述结果)

但是,我想在任何情况下使用与上述示例具有相同格式的此函数;列表中的多个元组。 有什么方法可以让我通过过滤器使用列表推导来获得这样的结果?

【问题讨论】:

  • 我建议使用 dict 理解将两个元组中的值合并在一起(按天分组)

标签: python filter list-comprehension


【解决方案1】:

您可以通过组合val1val2 并检查它们的第一个值是否在所需的集合中来创建一个查找所有元组的函数:

val1 = (('Friday', 23,4), ('Monday', 233,4), ('enjf', 33,2))
val2 = (('Friday', 3,4), ('Monday', 33,2))
all_vals = val1 + val2

def get_tuples(*keys):
    keys = set(keys)
    return [t for t in all_vals if t[0] in keys]

>>> get_tuples('Friday', 'Monday')
[('Friday', 23, 4), ('Monday', 233, 4), ('Friday', 3, 4), ('Monday', 33, 2)]
>>> get_tuples('Friday')
[('Friday', 23, 4), ('Friday', 3, 4)]

【讨论】:

    【解决方案2】:

    您还可以使用defaultdict 方法通过星号* 运算符解包参数:

    from collections import defaultdict
    
    days = ['Friday', 'Monday']
    
    val1 = (('Friday', 23, 4), ('Monday', 233, 4), ('enjf', 33, 2))
    val2 = (('Friday', 3, 4), ('Monday', 33, 2))
    
    tuple_dict = defaultdict(list)
    for day, *vals in val1 + val2:
        tuple_dict[day].append(vals)
    
    
    def get_tuples(*keys):
        keys = set(keys)
        return [(k, *v) for k in keys
                for v in tuple_dict[k]]
    

    用法同上:

    > get_tuples('Friday', 'Monday')
    # [('Monday', 233, 4), ('Monday', 33, 2), ('Friday', 23, 4), ('Friday', 3, 4)]
    > get_tuples('Friday')
    # [('Friday', 23, 4), ('Friday', 3, 4)]
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多