Skip to main content
 首页 » 编程设计

基于条件的Python进程列表

2025年05月04日11yyy_WW

我有一些值的列表

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 结果是此处多余。