Python 字符串到字典,键是以“结束”结尾的单词&引用;

Python 字符串到字典,键是以“结束”结尾的单词&引用;,python,dictionary,Python,Dictionary,我有一个字符串,其中包含我以后需要在代码中使用的信息,我想用以下方式从该字符串创建一个dict 字符串的键以“.”结尾 我想要一个字符串,如: "Mem. 3000 GB Nm. Mario Andrew Ag. 34 Str. Photoliss Street Nr. 45B" 要成为这条格言: {"Mem": "3000 GB", "Nm": "Mario Andrew", "Ag": "34", "Str": "Photoliss Street", "Nr": "45B"} 键可以不同

我有一个字符串,其中包含我以后需要在代码中使用的信息,我想用以下方式从该字符串创建一个dict

字符串的键以“.”结尾

我想要一个字符串,如:

"Mem. 3000 GB Nm. Mario Andrew Ag. 34 Str. Photoliss Street Nr. 45B"
要成为这条格言:

{"Mem": "3000 GB", "Nm": "Mario Andrew", "Ag": "34", "Str": "Photoliss Street", "Nr": "45B"}
键可以不同于字符串,因此它不遵循模板。

尝试使用正则表达式

Ex:

import re

s = "Mem. 3000 GB Nm. Mario Andrew Ag. 34 Str. Photoliss Street Nr. 45B"
data = re.split(r"(\w+)\.", s)[1:]

print({k: v.strip() for k, v in zip(data[::2], data[1::2])})
print(dict(zip(data[::2], data[1::2])))
{'Mem': '3000 GB', 'Nm': 'Mario Andrew', 'Ag': '34', 'Str': 'Photoliss Street', 'Nr': '45B'}
输出:

import re

s = "Mem. 3000 GB Nm. Mario Andrew Ag. 34 Str. Photoliss Street Nr. 45B"
data = re.split(r"(\w+)\.", s)[1:]

print({k: v.strip() for k, v in zip(data[::2], data[1::2])})
print(dict(zip(data[::2], data[1::2])))
{'Mem': '3000 GB', 'Nm': 'Mario Andrew', 'Ag': '34', 'Str': 'Photoliss Street', 'Nr': '45B'}
你可以用这个

MyString = "Mem. 3000 GB Nm. Mario Andrew Ag. 34 Str. Photoliss Street Nr. 45B"
MyList = MyString.split(". ") # create list with separated arguments
i = 0
lenght = len(MyList)
temp = list()
while i < lenght:
    temp.append(MyList[i:i+2]) # separate arguments in pairs of arguments
    i+=2
MyDict = dict(temp) # convect list to dict

使用Regex的解决方案可能是最好的,但只是为了练习,不需要
re

foo = "Mem. 3000 GB Nm. Mario Andrew Ag. 34 Str. Photoliss Street Nr. 45B"

def parse(text):
    result = {}
    key, *mid, last_val = text.split('. ')
    for chunk in mid:
        *value, new_key = chunk.split(' ')
        result[key], key = ' '.join(value), new_key
    result[key] = last_val
    return result

print(parse(foo))
输出:

{'Mem': '3000 GB', 'Nm': 'Mario Andrew', 'Ag': '34', 'Str': 'Photoliss Street', 'Nr': '45B'}

使用
REGEX
的简单易读代码:

import re

s = "Mem. 3000 GB Nm. Mario Andrew Ag. 34 Str. Photoliss Street Nr. 45B"
# capture only words and strips the spaces
pattern = r"(\w+)\.\s*(.+?)\s*(?=\w+\.|$)"
# no need to create a list use generator
output = dict(m.groups() for m in re.finditer(pattern, s))
print(output)  # {'Mem': '3000 GB', 'Nm': 'Mario Andrew', 'Ag': '34', 'Str': 'Photoliss Street', 'Nr': '45B'}

正如@buran所建议的那样:注意,您将值和键放在一起,例如'3000 GB Nm’请注意,您的属性会在字符串前后对内容空间进行赋值(例如:“3000 GB”而不是“3000 GB”)@Calvin Ruiz。谢谢
v.strip()
应该可以解决这个问题。一个较短的解决方案,您可以使用
output=dict(re.findall(pattern,s)
但这将创建一个您不需要的
列表。