python将字符串拆分为多个分隔符并放入字典中

python将字符串拆分为多个分隔符并放入字典中,python,Python,我有下面的字符串,我正试图拆分成一个具有特定名称的词典 string1 = "fdsfsf:?x=klink:apple&nn=specialtime&tr=instruction1&tr=instruction2&tr=instruction3" 我希望得到的是: >>> print(dict) {'namy_names': 'specialtime', 'tracks': ['instruction1', 'instruction2',

我有下面的字符串,我正试图拆分成一个具有特定名称的词典

string1 = "fdsfsf:?x=klink:apple&nn=specialtime&tr=instruction1&tr=instruction2&tr=instruction3"
我希望得到的是:

>>> print(dict)

{'namy_names': 'specialtime', 'tracks': ['instruction1', 'instruction2', 'instruction3']}
我对使用字典很陌生,所以不太确定它的结果如何

我尝试了下面的代码,但它只提供了
说明1
,而不是
说明的完整列表

delimiters = ['&nn', '&tr']

values = re.split('|'.join(delimiters), string1)
values.pop(0)  # remove the initial empty string
keys = re.findall('|'.join(delimiters), string1)
output = dict(zip(keys, values))

print(output)

这看起来像url编码的数据,因此您可以/应该使用:

使用url解析

from urllib import parse

url = "fdsfsf:?x=klink:apple&nn=specialtime&tr=instruction1&tr=instruction2&tr=instruction3"
d = parse.parse_qs(parse.urlparse(url).query)

print(d)
返回:

{'nn': ['specialtime'],
 'tr': ['instruction1', 'instruction2', 'instruction3'],
 'x': ['klink:apple']}
从这一点来说,如果必要的话,你只需要重命名并选择你的变量。像这样:

d = {
    'namy_names':d.get('nn',['Empty'])[0],
    'tracks':d.get('tr',[])
}

# {'namy_names': 'specialtime', 'tracks': ['instruction1', 'instruction2', 'instruction3']}

namy_名称
来自哪里?
namy_名称
来自我希望重命名的
&nn
(如果可能的话)。与来自
&tr
曲目相同,这似乎有一个额外的键,但我认为这没有什么帮助。谢谢你们的评论!我想我会接受这个答案,因为它会将所有条目作为字典条目返回给我,然后我可以重命名并获取我想要/需要的内容。可能对其他查看此答案的人有好处。@Anton vBR希望您能分享更多有关重命名
键的最后一部分代码的信息?什么是
['Empty']
[]
?@jakewong这些都是默认值。假设第一个字典没有任何'nn',那么它返回['Empty',]并且与曲目相同。例如,尝试传递一个没有这些参数的字符串。@coldspeed-Well,是的。我可以添加一种方法来配置将哪个键重命名为什么以及每个键是列表还是字符串,但我认为这可能是过度设计的。谢谢@Aran Fey的回答!
d = {
    'namy_names':d.get('nn',['Empty'])[0],
    'tracks':d.get('tr',[])
}

# {'namy_names': 'specialtime', 'tracks': ['instruction1', 'instruction2', 'instruction3']}