我有一些值的列表
mylist = ['1', 'Tom', 'Jerry', '2', 'Sinchan', 'Shero']
我的预期输出
[{'id': '1', 'mod': ['Tom', 'Jerry']}, {'id': '2', 'mod': ['Sinchan', 'Shero']}]
我的尝试
mylist = ['1', 'Tom', 'Jerry', '2', 'Sinchan', 'Shero']
data_list = []
mod = []
for i in mylist:
if i.isdigit() == True:
data = {}
data['id'] = i
data_list.append(data)
else:
mod.append(i)
data['mod'] = mod
print data_list
获取输出
[{'id': '1', 'mod': ['Tom', 'Jerry', 'Sinchan', 'Shero']}, {'id': '2', 'mod': ['Tom', 'Jerry', 'Sinchan', 'Shero']}]
我试图根据数字等获取 mod 值,我尝试过但坚持逻辑,请帮助我找到解决方案。提前致谢。
请您参考如下方法:
您的直接错误是没有为您找到的每个用户创建新 mod 列表。您的字典条目都共享一个列表对象,向列表附加更多值将通过共享引用显示这些额外条目:
>>> mod = []
>>> data_list = [{'mod': mod}, {'mod': mod}] # simplified version of your result
>>> data_list
[{'mod': []}, {'mod': []}]
>>> mod.append('Tom')
>>> data_list
[{'mod': ['Tom']}, {'mod': ['Tom']}]
>>> mod.append('Jerry')
>>> data_list
[{'mod': ['Tom', 'Jerry']}, {'mod': ['Tom', 'Jerry']}]
记住:Python names are references to values ,您可以分享这些引用资料。
相反,在创建 data 字典时添加一个新的空列表:
for i in mylist:
if i.isdigit():
data = {'id': i, 'mod': []}
data_list.append(data)
else:
data['mod'].append(i)
每个 data 字典都附加了一个新的空列表,您将不再看到共享数据:
>>> mylist = ['1', 'Tom', 'Jerry', '2', 'Sinchan', 'Shero']
>>> data_list = []
>>> for i in mylist:
... if i.isdigit():
... data = {'id': i, 'mod': []}
... data_list.append(data)
... else:
... data['mod'].append(i)
...
>>> data_list
[{'id': '1', 'mod': ['Tom', 'Jerry']}, {'id': '2', 'mod': ['Sinchan', 'Shero']}]
请注意,您不需要使用== True; if 语句已经 测试表达式是否产生真值,== True 产生True 结果是此处多余。
