【问题标题】:Join list into string by preserving quotes if present通过保留引号(如果存在)将列表加入字符串
【发布时间】:2021-12-12 08:03:35
【问题描述】:

例子

items = ["1,2", "3", "4"]

预期输出:

'"1,2", 3, 4' # string. joined bypreserving quotes

我试过了

",".join(items)

但它给出了:

"1, 2, 3, 4" 

有什么方法可以做到这一点吗?

【问题讨论】:

  • items 列表中的所有字符串都不包含引号字符,所以没有什么要保留的
  • 您是否正在尝试生成 CSV 文件?如果是这样,请使用 CSV 库
  • 我正在尝试写入标准输出。
  • @ForceBru 更新了我的问题
  • @KishanMehta ','.join(items) 已经工作并给出了您预期的输出 - 至少在您更新的问题中

标签: python-3.x list


【解决方案1】:

如果您尝试转换 int 但保持字符串不变,那么这会有所帮助:

def foo(bar : list) -> list:
    x = list()
    for i in bar:
        try:
            x.append(int(i))
        except:
            x.append(i)
    return x

结果(符合您的预期结果):

>>>items = ["1,2", "3", "4"]
>>>foo(items))
['1,2', 3, 4]

您似乎正在尝试使用 csv 文件,如果是这种情况,那么使用内置的 csv 模块会有所帮助。

【讨论】:

  • 我需要字符串而不是列表
【解决方案2】:

使用 json.dumps 将其与引号一起获取:

import json
items = ["1,2", "3", "4"]
json.dumps(items)

【讨论】:

  • 这是字符串中的列表。我需要这样的字符串'"1,2", 3, 4'
【解决方案3】:

您是否尝试序列化要在 CSV 文件中使用的行?如果是这样,csv 之类的 csv 库可能会提供您所需的一切,包括处理您目前无法想到的边缘情况。

如果 CSV 不是,您所追求的是什么,您可以检测输入中的逗号,然后将其用引号括起来。例如列表理解:

a = ['1,2', '3', '4']
print(','.join(['"' + x + '"' if ',' in x else x for x in a]))
print(','.join(['"%s"' % x if ',' in x else x for x in a])) # with % operator
print(','.join([f'"{x}"' if ',' in x else x for x in a])) # with f-strings

或者按照Niusoskianswer 中的建议委托给json.dumps,但去掉前导和后括号:

import json
a = ['1,2', '3', '4']
print(json.dumps(a)[1:-1])
print(json.dumps(a).strip('[]')) # doesn't correctly handle nested arrays

【讨论】:

    猜你喜欢
    • 2012-01-18
    • 2014-04-22
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多