Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串中的每一行转换为字典键_Python_String_Dictionary - Fatal编程技术网

Python 将字符串中的每一行转换为字典键

Python 将字符串中的每一行转换为字典键,python,string,dictionary,Python,String,Dictionary,嗨,我是python新手,不知道我是否可以在这个网站上问这个基本问题 我想将字符串中的每一行转换为一个键,并将0指定为一个值 我的字符串是: s = ''' sarika santha # akash nice ''' 我试过这种方法,但认为对我的要求没有用 请帮助任何人提前感谢 编辑: 实际上,我要求的是基本的字符串,但实际上我是在用后面的字符串 s=""" san francisco Santha Kumari this one "

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

我想将字符串中的每一行转换为一个键,并将0指定为一个值

我的字符串是:

s = '''
sarika

santha

#

akash


nice
'''
我试过这种方法,但认为对我的要求没有用

请帮助任何人提前感谢

编辑:

实际上,我要求的是基本的字符串,但实际上我是在用后面的字符串

s="""
san
francisco

Santha

Kumari



this one
"""

 Here it should take {sanfrancisco:0 , santha kumari:0 , this one: 0 }
这是我面临的挑战


在我的字符串中,如果有超过1个新行间距,则应将下一行字符串作为一个单词,并转换为关键字。您可以通过以下方式执行此操作:

>>> s="""
... hello
... #
... world
... 
... vk
... """
>>> words = s.split("\n")
>>> words
['', 'hello', '#', 'world', '', 'vk', '']
>>> words = words[1:len(words)-1]
>>> words
['hello', '#', 'world', '', 'vk']
>>> word_dic = {}
>>> for word in words:
...     if word not in word_dic:
...             word_dic[word]=0
... 
>>> word_dic
{'': 0, 'world': 0, '#': 0, 'vk': 0, 'hello': 0}
>>> 

如果您有任何问题,请告诉我。

您可以这样做:

# Split the string into a list
l = s.split()
dictionary = {}

# iterate through every element of the list and assign a value of 0 to it

n = 0


for word in l:
   while n < len(l) - 1:
       if word == "#":
           continue
       w = l[n] + l[n+1]
       dictionary.__setitem__(w, 0)
       n+=2
print(dictionary)
#将字符串拆分为一个列表
l=s.split()
字典={}
#遍历列表中的每个元素,并为其赋值0
n=0
对于l中的单词:
当n
您可以连续匹配所有行后跟2个换行符,或者匹配所有行后跟一个换行符

^(?:\S.*(?:\n\n\S.*)+|\S.*(?:\n\S.*)*)
模式匹配

  • ^
    字符串的开头
  • (?:
    非捕获组
    • \S.*
      将非空白字符与行的其余部分匹配
    • (?:\n\n\S.*)+
      重复匹配1+乘以2个换行符、一个非空白字符和行的其余部分
    • |
    • \S.*
      将单个非空白字符与行的其余部分匹配
    • (?:\n\S.*)
      可以选择匹配换行符、非空白字符和行的其余部分
  • 关闭非捕获组
|

对于这些匹配,用空格替换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}
台阶-

  • 通过translate从字符串中删除标点符号
  • 如果用2个字符分隔,则拆分单词\n
  • 从列表中删除空格
  • 删除\n字符并使用dict comprehension生成所需的dict

  • 但是我不想在我的字典里留下空格和特殊字符,你能帮我吗嗨,你可以看看我的答案,我想它解决了你所有的问题;)。我已经编辑了我的问题,我已经解释了我在使用你的代码时所面临的挑战。你能帮我@GetWobirdsstone吗me@coder我已经编辑了我的答案,这有用吗?@GetTwoBirdsStonedAtOnce你能解释一下,对于loop onceSure,所以:for循环将获取列表中的每一项并对其进行处理,然后我希望它在“n”(迭代器计数)小于列表长度-1的情况下运行(-1,因为有一个剩余点会导致整个事件中断),然后我把接下来的两个词加在一起,把这个词指定为一个值为0的键,然后我将迭代器计数增加2,因为当我只增加1时,我遇到了奇怪的问题,结果是:{'sanfrancisco':0,'franciscoSantha':0,'santhakumaritis':0,'thisone':0}。所需的行为尚不清楚:
    Santha\n\nKumari
    为什么要解析为一个键?(我还想指出的是,一旦你有了字符串列表,获得所需的字典就完全可以理解了,但我想说的是,这里有一些X-Y问题,你实际上并不需要那本字典。)
    import string
    s = '''
    sarika
    santha
    
    #
    
    akash
    
    
    
    
    nice
    '''
    
    s = s.translate(str.maketrans('', '', string.punctuation))
    word_list = s.split('\n\n')
    while '' in word_list:
        word_list.remove('')
    result = {word.replace('\n', ''): 0 for word in word_list}
    print(result)