首页 > 解决方案 > 将字符串中的每一行转换为字典键

问题描述

嗨,我是 python 新手,不知道我是否可以在这个网站上问这个基本问题

我想将字符串中的每一行转换为一个键并将 0 分配为一个值

我的字符串是:

s = '''
sarika

santha

#

akash


nice
'''

我曾尝试过这种https://www.geeksforgeeks.org/ways-to-convert-string-to-dictionary/方式,但认为对我的要求没有用

请帮助任何人提前谢谢

编辑:

实际上我要求的是基本字符串,但我实际上是要跟随的字符串

s="""
san
francisco

Santha

Kumari



this one
"""

 Here it should take {sanfrancisco:0 , santha kumari:0 , this one: 0 }

这是我面临的挑战

在我的字符串中,如果有超过 1 个新行间隙,它应该将下一行字符串作为一个单词并转换为键

标签: pythonstringdictionary

解决方案


您可以连续匹配所有行后跟 2 个换行符,或者匹配所有行后跟一个换行符。

^(?:\S.*(?:\n\n\S.*)+|\S.*(?:\n\S.*)*)

模式匹配

  • ^字符串的开始
  • (?:非捕获组
    • \S.*匹配非空白字符和该行的其余部分
    • (?:\n\n\S.*)+重复匹配 1+ 次 2 个换行符、一个非空白字符和该行的其余部分
    • |或者
    • \S.*匹配单个非空白字符和该行的其余部分
    • (?:\n\S.*)*可选地匹配换行符、非空白字符和行的其余部分
  • )关闭非捕获组

正则表达式演示| Python 演示

对于这些匹配项,用空格替换 2 个换行符并用空字符串替换一个换行符。

然后从这些值中,创建一个字典并用 0 初始化所有值。

例子

import re

s="""
san
francisco

Santha

Kumari



this one
"""
pattern = r"^(?:\S.*(?:\n\n\S.*)+|\S.*(?:\n\S.*)*)"
my_dict = dict.fromkeys(
    [
        re.sub(
            r"(\n\n)|\n",
               lambda n: " " if n.group(1) else "", s.lower()
        ) for s in re.findall(pattern, s, re.MULTILINE)
    ],
    0
)
print(my_dict)

输出

{'sanfrancisco': 0, 'santha kumari': 0, 'this one': 0}

推荐阅读