我想分割从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'}}
答案 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'}]
这里的过程是:
|
拆分字符串并列出它split()
的默认分隔符)=
并将其用作字典的键值