使用.split()的字典列表的字符串

时间:2014-06-12 13:04:38

标签: python python-3.x dictionary split list-comprehension

我想分割从telnet查询中提供的数据。我有两个案例:

单个数据:

user_name=toto user_password=12345 user_type=admin`

多个数据:

user_name=toto user_password=12345 user_type=admin|user_name=tata user_password=12345 user_type=user|user_name=tonton user_password=12345 user_type=moderator

我尝试使用data = dict(item.split("=") for item in data.split(' '))为单个数据构建我的字典,但我总是收到此错误:

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

我没有找到任何使用单一功能构建字典的好解决方案。我期待的是:

{'user_name':'tata','user_password':'12345','user_type':'admin'} 

for multiple results: 
{{'user_name':'tata','user_password':'12345','user_type':'admin'} {'user_name':'toto','user_password':'12345','user_type':'user'}{'user_name':'tonton','user_password':'12345','user_type':'moderator'}} 

1 个答案:

答案 0 :(得分:1)

您在问题中发布的代码在Python 2和Python 3上都适用于单个数据:

$ python3
>>> s = "user_name=toto user_password=12345 user_type=admin"
>>> dict(item.split("=") for item in s.split(' '))
{'user_password': '12345', 'user_name': 'toto', 'user_type': 'admin'}

$ python2
>>> dict(item.split("=") for item in s.split(' '))
{'user_password': '12345', 'user_name': 'toto', 'user_type': 'admin'}

对于多个数据,您只需要提供另一级别的列表理解:

>>> s = "user_name=toto user_password=12345 user_type=admin|user_name=tata user_password=12345 user_type=user|user_name=tonton user_password=12345 user_type=moderator"
>>> [dict(item.split("=") for item in ss.split()) for ss in s.split('|')]
[{'user_password': '12345', 'user_name': 'toto', 'user_type': 'admin'}, 
 {'user_password': '12345', 'user_name': 'tata', 'user_type': 'user'},
 {'user_password': '12345', 'user_name': 'tonton', 'user_type': 'moderator'}]

这里的过程是:

  1. 在每个管道|拆分字符串并列出它
  2. 对于此列表中的每个项目,按空格分割(split()的默认分隔符)
  3. 然后,对于每个列表的每个子元素,将其等于=并将其用作字典的键值