【问题标题】:How to concatenate strings in a tuple?如何连接元组中的字符串?
【发布时间】:2016-07-12 16:19:19
【问题描述】:
input:[("xyz",100),("tao",90),("quinee",100)]

数字相等时,字符串将被连接到一个列表中。

 output:[(["xyz","quinee"],100),(["tao"],90)]

【问题讨论】:

  • 你试过了吗?
  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只会在发布者已经尝试自己解决问题时提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出以及您实际获得的输出(控制台输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask

标签: python string list tuples


【解决方案1】:

itertools.groupby 可以做到。

from itertools import groupby

def key(x): return x[1]

input=[("xyz",100),("tao",90),("quinee",100)]

output = [
    (list(string for string,index in group),index)
    for index,group in groupby(sorted(input, key=key, reverse=True), key=key)]

assert output ==  [(["xyz","quinee"],100),(["tao"],90)]

【讨论】:

    【解决方案2】:

    尝试使用默认字典,将其值默认为列表:

    from collections import defaultdict
    
    def concat(lst):
        d = defaultdict(list)
        for k, v in lst:
            d[v].append(k)
        return [(v, k) for k, v in d.items()]
    

    【讨论】:

      【解决方案3】:

      您可以使用defaultdict

      from collections import defaultdict
      
      l = [("xyz",100),("tao",90),("quinee",100)]
      
      d = defaultdict(list)
      for i in l:
          d[i[1]].append(i[0])
      
      r = [(j, i) for i, j in d.items()]
      print(r)
      # [(['tao'], 90), (['xyz', 'quinee'], 100)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-04
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        • 1970-01-01
        相关资源
        最近更新 更多