我有一个字符串,其中包含稍后在代码中需要使用的信息,并且我想通过以下方式从该字符串创建字典。
该字符串的键以“。”结尾。
我想要一个像这样的字符串:
"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"}
键可以与字符串不同,因此不遵循模板。
答案 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'}