在python中创建单独的列表

2024-04-28 07:14:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多列表创建为

[['Mappings_1:', 'AMA111:AMA112,EM5', 'EM3,EM4',
  'EM1,EM2'],
 ['Mappings_2:', 'AMA111:AMA112,EM5', 'EM3,EM4'],
 ['Mappings_3:', 'AMA111:AMA112,EM5', 'EM3,EM4',
  'EM1,EM2', 'FPA1,FPA1', 'FPA3:FPA4,AMA113']]

我有一个选择参数,它可以将值保存为“Mappings\u 1”或“Mappings\u 2”或“Mappings\u 3”

如果值是'Mappings\u1',那么我想通过assignid在一个单独的列表中分隔['Mappings_1:', 'AMA111:AMA112,EM5', 'EM3,EM4', 'EM1,EM2'],如下所示

valid_map = [{'Id': '1', 'mapping': 'AMA111:AMA112,EM5'},
             {'Id': '2', 'mapping': 'EM3,EM4'},
             {'Id': '3', 'mapping': 'EM1,EM2'}]

根据所选参数,我需要通过分配通道id来分隔特定列表

请分享一些想法


Tags: id列表参数em1mappingmappingsem2fpa1
3条回答

您可以控制原始列表生成吗?也许你应该用字典。你知道吗

比如:

valid_maps = {'Mappings_1': ['AMA111:AMA112,EM5', 'EM3,EM4', 'EM1,EM2'],
              'Mappings_2': ['AMA111:AMA112,EM5', 'EM3,EM4'],
              'Mappings_3': ['AMA111:AMA112,EM5', 'EM3,EM4','EM1,EM2', 
                             'FPA1,FPA1', 'FPA3:FPA4,AMA113']}

我使用列表作为字典中的值,因为id标签似乎没有添加多少内容。你知道吗

我认为你的多重列表效率不高。你应该用dict,但你可以试试这样的。你知道吗

#!/usr/bin/env python
#-*-coding:utf-8-*-



multiple_list = [
                    ['Mappings_1', 'AMA111:AMA112,EM5', 'EM3,EM4','EM1,EM2'],
                    ['Mappings_2', 'AMA111:AMA112,EM5', 'EM3,EM4'],
                    ['Mappings_3', 'AMA111:AMA112,EM5', 'EM3,EM4','EM1,EM2', 'FPA1,FPA1', 'FPA3:FPA4,AMA113']
                ]

valid_map = []
selection = "Mappings_1"
i = 0

while((i < len(multiple_list)) and (multiple_list[i][0]!= selection)):
    print multiple_list[i][0]
    i += 1

if(i<len(multiple_list)):
    j = 1
    while(j<len(multiple_list[i])):
        tmpDict = dict()
        tmpDict['id'] = j
        tmpDict['mapping']  = multiple_list[i][j]
        valid_map.append(tmpDict)
        j += 1




print valid_map

但我的建议是改变你的数据模型。你知道吗

#!/usr/bin/env python
#-*-coding:utf-8-*-



multiple_list = {
                    'Mappings_1' : ['AMA111:AMA112,EM5', 'EM3,EM4','EM1,EM2'],
                    'Mappings_2' : ['AMA111:AMA112,EM5', 'EM3,EM4'],
                    'Mappings_3' : ['AMA111:AMA112,EM5', 'EM3,EM4','EM1,EM2', 'FPA1,FPA1', 'FPA3:FPA4,AMA113']
                }

valid_map = []
selection = 'Mappings_1'

if(selection in multiple_list):
    for i in xrange(0,len(multiple_list[selection])):
        tmpDict = {}
        tmpDict["id"] = i + 1
        tmpDict["mapping"] = multiple_list[selection][i]
        valid_map.append(tmpDict)
        i += 1


print valid_map

这非常简单-遍历列表中的每个子列表,检查哪个子列表的第一个元素与您的选择参数相同(例如Mappings_1),然后将该子列表的rest转换为字典列表。你知道吗

def list_to_mapping(lst, selection):
    for sublst in lst: # step over sublists
        if sublst[0] == selection: # if selection parameter matched
            # build list of dictionaries
            valid_map = [{'id': index+1, 'mapping': value} # index+1 for 1-based indexing
                         for index, value in enumerate(sublst[1:])]
            return valid_map

lst = [['Mappings_1:', 'AMA111:AMA112,EM5', 'EM3,EM4', 'EM1,EM2'],
       ['Mappings_2:', 'AMA111:AMA112,EM5', 'EM3,EM4'],
       ['Mappings_3:', 'AMA111:AMA112,EM5', 'EM3,EM4', 'EM1,EM2', 'FPA1,FPA1', 'FPA3:FPA4,AMA113']]

result = list_to_mapping(lst, 'Mappings_1:')
print(result)

结果(格式化):

[{'mapping': 'AMA111:AMA112,EM5', 'id': 1}, 
 {'mapping': 'EM3,EM4', 'id': 2}, 
 {'mapping': 'EM1,EM2', 'id': 3}]

相关问题 更多 >