【问题标题】:Skip concatenating the first value跳过连接第一个值
【发布时间】:2021-10-04 01:56:59
【问题描述】:

我的问题相当直截了当。

我正在尝试将一个字符串与循环中的返回值连接起来。 我不想将文本添加到第一次出现,而是添加到其余部分。

这里是示例代码:

list_of_tables = {'k1': 'v1:v2',
'k2':'v3:v4',
'k3':'v5:v6',
'k4':'v7:v8',
'k5':None }

def gen_stmt(val1_name, val2_name):
    
    return 'some text '+ val1_name + ': '+ val2_name

stmt = ''
for k,v in list_of_tables.items():
    if v:
        pair_val = v.split(':') 
        fin_value += 'text I need to concat' + gen_stmt(*pair_val)
    return fin_value

对于 k2、k3、k4 的所有值,我需要“我需要连接的文本”,并且我需要为所有键 k1 ...k5 运行 gen_stmt 函数

如何连接除第一个值之外的所有值?

我想要的输出是什么

一些文本 v1 : v2 文本我需要连接一些文本 v3 : v4 文本我需要 连接一些文本 v5 : v6 文本我需要连接一些文本 v7 : v8

【问题讨论】:

  • 取除第一个值以外的所有内容:for k, v in list_of_tables.items()[1::]:
  • 或者'text I need to concat'.join(...)
  • 很抱歉给您带来了困惑。我仍然需要将 k1 传递给 gen_stmt 函数。我需要那个值
  • 您的描述不是很清楚 - 您能否提供一个示例来准确显示您想要的最终结果,以便人们可以就如何自动创建给您建议?
  • 我已经提供了我想要的输出来提问

标签: python concatenation


【解决方案1】:

我会再详细说明一下。

创建一个循环,可以将每个项目转换为字符串并将其添加到列表中。

然后使用您需要的任何分隔符加入最终列表。

试试这样的:

string_values = []
for value in list_of_tables.values():
    if value:
        val1, val2 = value.split(':')
        string_value = gen_stmt(val1, val2)
        string_values.append(string_value)


print(' text I need to concat '.join(string_values))

要跳过第一个值,可以将 values 对象变成一个列表,然后切掉第一个值:

还有一个只是为了踢球:

print(' text I need to concat '.join(
    gen_stmt(*value.split(':'))
    for value in list_of_tables.values()
    if value
))

【讨论】:

  • 它不工作。它仍然打印我需要为 k1 连接的文本。这就是您的代码返回的内容。文本我需要合并文本 v1:v2 文本我需要合并文本 v3:v4 文本我需要合并文本 v5:v6 文本我需要合并文本 v7:v8。但我需要的是,“一些文本 v1: v2 文本我需要连接一些文本 v3: v4 文本我需要连接一些文本 v5: v6 文本我需要连接一些文本 v7: v8”
  • @PaddyIyer 啊,我终于明白你的意思了。使用' text I need to concat ' 作为连接参数。
  • 你能显示代码sn-p吗?谢谢
  • @PaddyIyer 再看一下答案,已经更新了。它现在产生some text v1: v2 text I need to concat some text v3: v4 text I need to concat some text v5: v6 text I need to concat some text v7: v8
  • 感谢您的宝贵帮助。我之前确实发了一条消息感谢你,但它被删除了。
【解决方案2】:

您还可以传递一个 if-else 语句,该语句将从列表的其他元素中过滤出第一个值。 我建议的代码是这样的。

list_of_tables = {'k1': 'v1:v2',
'k2':'v3:v4',
'k3':'v5:v6',
'k4':'v7:v8',
'k5':None }
def gen_stmt(val1_name, val2_name):
    
    return 'some text '+ val1_name + ':'+ val2_name

fin_value = ''
i = 0
for k,v in list_of_tables.items():
    if i == 0:
        pair_val = v.split(':')
        fin_value = gen_stmt(*pair_val) + " "          
    elif v:
        pair_val = v.split(':')
        fin_value += 'text I need to concat' + gen_stmt(*pair_val)
    i +=1

print(fin_value)

我认为这是一个非常简单的方法,但是是的,这里添加了一些额外的行,这会使您的代码有点长。

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多