代码之家  ›  专栏  ›  技术社区  ›  Symphony

在Python中拆分一个字符串,以便输出有换行符,并且没有“和”括号

  •  -3
  • Symphony  · 技术社区  · 6 年前

    我有一个输入字符串,如下所示:

    input_string = [{"name":"Jason","cover":25.1},{"name":"Jake","cover":62.23},{"name":"Amy","cover":70.11}]
    

    我需要输出字符串 line breaks 而且没有 “ brackets

    output_string_1 = 
    name:Jason, cover:25.1
    name:Jake, cover:62.23
    name:Amy, cover:70.11
    

    最后,我需要输出字符串2,它消除了重复项,并且具有 | 分离器

    output_string_2 = 
    name | cover
    Jason | 25.1
    Jake | 62.23
    Amy | 70.11
    

    output_string_1 output_string_2 应为类型 str

    我需要一个解决方案,它可以通过编程实现,而不考虑字符串中元素的数量

    3 回复  |  直到 6 年前
        1
  •  1
  •   Andy Hayden    6 年前

    您可以将字符串作为json解析为dict列表:

    In [11]: lst = json.loads(input_string)
    
    In [12]: print("name | cover")
         ...: for d in lst:
         ...:     print(d["name"], "|", d["cover"])
         ...:
    name | cover
    Jason | 25.1
    Jake | 62.23
    Amy | 70.11
    
    # To return the string
    In [13]: "\n".join(["name | cover"] + [d["name"] + " | " + str(d["cover"]) for d in lst])
    Out[13]: 'name | cover\nJason | 25.1\nJake | 62.23\nAmy | 70.11'
    
        2
  •  2
  •   jpp    6 年前

    你可以用 ast.literal_eval 具有 str.join

    from ast import literal_eval
    
    L = literal_eval(input_string)
    
    print('\n'.join([f'name:{d["name"]}, cover:{d["cover"]}' for d in L]))
    
    name:Jason, cover:25.1
    name:Jake, cover:62.23
    name:Amy, cover:70.11
    
    print('\n'.join(['name | cover'] + [f'{d["name"]} | {d["cover"]}' for d in L]))
    
    name | cover
    Jason | 25.1
    Jake | 62.23
    Amy | 70.11
    
        3
  •  1
  •   Lukas    6 年前

    你可以用你的列表和字典输入你的字符串,你的输出就是真正的dict列表。

    >>> import ast
    >>> a = ast.literal_eval('[{"name":"Jason","cover":25.1},{"name":"Jake","cover":62.23},{"name":"Amy","cover":70.11}]')
    >>> print(a)
    [{'name': 'Jason', 'cover': 25.1}, {'name': 'Jake', 'cover': 62.23}, {'name': 'Amy', 'cover': 70.11}]
    

    然后你就可以很容易地。。。

    for y in a:
        print("name:" + y["name"] + ", cover:" + str(y["cover"]))
    

    import ast
    a = ast.literal_eval('[{"name":"Jason","cover":25.1},{"name":"Jake","cover":62.23},{"name":"Amy","cover":70.11}]')
    for y in a:
        # [3 STRINGS]
        print("name:" + y["name"] + ", cover:" + str(y["cover"]))
    output_string_1 = "name:" + a[0]["name"] + ", cover:" + str(a[0]["cover"]) + "\nname:"+ a[1]["name"] + ", cover:" + str(a[1]["cover"]) + "\nname:"+ a[2]["name"] + ", cover:" + str(a[2]["cover"]))
    output_string_2 = "name | cover\n" + a[0]["name"] + " | " + str(a[0]["cover"]) + "\n"+ a[1]["name"] + " | " + str(a[1]["cover"]) + "\n"+ a[2]["name"] + " | " + str(a[2]["cover"]))
    print(output_string_1)
    print(output_string_2)
    

    结果是:

    [3 STRINGS]
    name:Jason, cover:25.1
    name:Jake, cover:62.23
    name:Amy, cover:70.11
    
    [1 STRING]
    name:Jason, cover:25.1
    name:Jake, cover:62.23
    name:Amy, cover:70.11
    
    [1 STRING]
    name | cover
    Jason | 25.1
    Jake | 62.23
    Amy | 70.11
    

    如果你喜欢我的答案,请投我一票!