2016-02-12 158 views
2

我试图将以下字符串转换为字典,其中IP成为一个键,以及其他所有内容|成为一个值:如何将字符串转换为字典在python中转义特殊字符

my_string = '''10.11.22.33|{"property1": "0",  "property2": "1", "property3":  "1", "property4": "1", "property5": "0"} 
10.11.22.34|{"property1": "0",  "property2": "0", "property3":  "1", "property4": "1", "property5": "0", "property6": "0", "property7": "1", "property8": "0", "property9": "0", "property10": "1"}''' 

这是我试过的代码:

d = dict(node.split('|') for node in my_string.split()) 

不过,我得到这个错误:

ValueError: dictionary update sequence element #1 has length 1; 2 is required 

所以我简化的my_string只是一条线:

my_string = '10.11.22.33|{"property1": "0",  "property2": "1", "property3":  "1", "property4": "1", "property5": "0"}' 

并使用此代码先sp点燃行:

wow = my_string.split('|') 

输出:

['10.11.22.33', '{"property1": "0",  "property2": "1", "property3":  "1", "property4": "1", "property5": "0"}'] 

以上是两个元素的列表。然而,当我尝试创建字典出来的,它失败,此错误:

d = dict(wow) 

输出:

ValueError: dictionary update sequence element #0 has length 11; 2 is required 

我不想修改的值 - 它需要保留原样。将这行代码翻译成字典的正确方法如下:

{'10.11.22.33': '{"property1": "0",  "property2": "1", "property3":  "1", "property4": "1", "property5": "0"}'} 

这是Python 2.6。

回答

1

您的第一种方法是正确的,只是它在错误的位置分割,因为str.split()默认情况下使用空格作为分隔符。尝试str.splitlines()代替:

d = dict(node.split('|') for node in my_string.splitlines()) 
+0

这工作和很简单。阅读某处,分裂是在新的线人物分裂......一定是在做梦。猜猜是时候休息一下了。 – Lidia

2

您需要split在您的字符串\n第一:

dict(ip.split('|') for ip in s.split('\n')) 

您也可以看看到re.findall

dict(re.findall(r'(\d+\.\d+\.\d+\.\d+\d+).*?(\{.*?\})', s)) 

哪里s是您的字符串

+0

不会在新生产线上发生问题。 – Lidia

+0

是什么问题?根据你的意见,这是问题 – tinySandy

+0

对不起,我不清楚 - 问题是我没有分裂新的路线。 – Lidia

相关问题