字符串到字典,键是以“。”结尾的单词。

时间:2019-09-18 08:54:57

标签: python dictionary

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

该字符串的键以“。”结尾。

我想要一个像这样的字符串:

"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"}

键可以与字符串不同,因此不遵循模板。

4 个答案:

答案 0 :(得分:6)

尝试使用正则表达式。

例如:

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'}

答案 1 :(得分:3)

使用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'}

答案 2 :(得分:2)

使用filterDates = (date: Date): boolean => { if (this.apiResult !== undefined) { let d = this.pipe.transform(date, 'yyyy-MM-dd'); return this.apiResult.has(d); } else { return true; } } 的简单易读的代码:

REGEX

答案 3 :(得分:1)

您可以使用此

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

MyDict满足您的要求:

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