我想遍历此列表
['name: test1', 'email: test1@gmail.com', 'role: test', 'description: test', 'name: test2', 'email: test2@gmail.com', 'role: test2', 'description: test2', 'name: test3', 'email: test3@gmail.com', 'role: test3', 'description: test3']
,并返回每个组的词典列表。例如。
[{name: 'test', email:'test@gmail.com', role:'test', description:'test'}, {name: 'test2', email:'test2@gmail.com', role:'test2', description:'test2'}]
我尝试用,(逗号)分隔列表,并在其中搜索“名称:”。我可以返回一个字段,例如姓名,但正在努力链接到电子邮件,角色等。
谢谢您的帮助。
答案 0 :(得分:3)
无需事先知道每个字典具有的键数,就可以遍历列表,将每个字符串分成一个键和一个值,': '
,如果该键有新的字典,则将其追加到列表中已经在最后一个字典中,并继续通过键将值添加到最后一个字典中:
output = []
for key_value in lst:
key, value = key_value.split(': ', 1)
if not output or key in output[-1]:
output.append({})
output[-1][key] = value
这样,鉴于给定的示例列表存储在lst
中,output
将变为:
[{'name': 'test1',
'email': 'test1@gmail.com',
'role': 'test',
'description': 'test'},
{'name': 'test2',
'email': 'test2@gmail.com',
'role': 'test2',
'description': 'test2'},
{'name': 'test3',
'email': 'test3@gmail.com',
'role': 'test3',
'description': 'test3'}]
答案 1 :(得分:2)
我假设,您的订单始终是相同的,即以4为一组。这个想法是使用:
分割字符串,然后创建键/值对并使用嵌套循环。 .strip()
是为了摆脱空白
lst = ['name: test1', 'email: test1@gmail.com', 'role: test', 'description: test',
'name: test2', 'email: test2@gmail.com', 'role: test2', 'description: test2',
'name: test3', 'email: test3@gmail.com', 'role: test3', 'description: test3']
answer = []
for i in range(0, len(lst), 4):
dic = {}
for j in lst[i:i+4]:
dic[j.split(':')[0]] = j.split(':')[1].strip()
answer.append(dic)
# [{'name': 'test1', 'email': 'test1@gmail.com', 'role': 'test', 'description': 'test'},
# {'name': 'test2', 'email': 'test2@gmail.com', 'role': 'test2', 'description': 'test2'},
# {'name': 'test3', 'email': 'test3@gmail.com', 'role': 'test3', 'description': 'test3'}]
列表理解应该像
answer = [{j.split(':')[0]:j.split(':')[1].strip() for j in lst[i:i+4]} for i in range(0, len(lst), 4)]
答案 2 :(得分:2)
如果确保列表中数据的形式始终是问题示例中的方式,则可以执行以下操作:
L = ['name: test1', 'email: test1@gmail.com', 'role: test', 'description: test', 'name: test2', 'email: test2@gmail.com', 'role: test2', 'description: test2', 'name: test3', 'email: test3@gmail.com', 'role: test3', 'description: test3']
A = []
for i in range(0, len(L), 4):
D = {}
for p in L[i:i + 4]:
k, v = map(str.strip, p.split(':'))
D[k] = v
A.append(D)
from pprint import pprint
pprint(A)
输出:
[{'description': 'test',
'email': 'test1@gmail.com',
'name': 'test1',
'role': 'test'},
{'description': 'test2',
'email': 'test2@gmail.com',
'name': 'test2',
'role': 'test2'},
{'description': 'test3',
'email': 'test3@gmail.com',
'name': 'test3',
'role': 'test3'}]
答案 3 :(得分:1)
您可以这样做:
dictionary = dict()
all_dictionaries = []
for index , value in [x.split(": ") for x in A] :
if index in dictionary :
all_dictionaries .append(dictionary )
dictionary = dict()
else :
dictionary [index] = value
all_dictonaries.append(dictionary)
答案 4 :(得分:1)
此解决方案假定每个组的大小正好为4
l = ['name: test1', 'email: test1@gmail.com', 'role: test', 'description: test',
'name: test2', 'email: test2@gmail.com', 'role: test2', 'description: test2',
'name: test3', 'email: test3@gmail.com', 'role: test3', 'description: test3']
output = [dict(s.split(": ") for s in l[i:i+4]) for i in range(0, len(l), 4)]