Python 从CSV文件数据动态创建列表列表

Python 从CSV文件数据动态创建列表列表,python,list,csv,Python,List,Csv,我有一个CSV文件,我想把它作为配置文件来读取,以创建列表的列表来存储数据 我的CSV文件的格式为: list_name, search_criteria channel1, c1 channel2, c2 channel3, c3 我想读取CSV文件中的并从list\u name数据动态创建列表的列表,因为它可能随时间增长和收缩,我总是想要CSV文件中定义的任何内容 CSV文件中的list\u name是我要动态创建的列表名的“前缀”。例如,从csv文件中读入“channel1”

我有一个
CSV
文件,我想把它作为配置文件来读取,以创建
列表的
列表
来存储数据

我的
CSV
文件的格式为:

list_name, search_criteria  
channel1, c1  
channel2, c2  
channel3, c3
我想
读取
CSV
文件中的
并从
list\u name
数据动态创建
列表的
列表,因为它可能随时间增长和收缩,我总是想要
CSV
文件中定义的任何内容

CSV文件中的
list\u name
是我要动态创建的列表名的“前缀”。例如,从csv文件中读入“channel1”、“channel2”、“channel3”,并创建一个列表列表,其中“mainList[]”是核心列表,其中包含3个名为“channel1\u channel\u list”、“channel2\u channel\u list”、“channel3\u cannel\u list”的列表

我意识到我的命名约定可以简化,所以请忽略不计。一旦我有了有效的解决方案,我会留下来。我将使用搜索条件填充
mainLists[]
中的列表

这是我不完整的代码:

mainList = []

with open('list_config.csv') as input_file:
    dictReader = csv.DictReader(input_file)

    for row in dictReader:
        listName = row['list_name'] + '_channel_list'

使用
语句
中加载
文件
,然后使用
csv.reader
,后者
返回
读卡器对象
。然后,通过将其传递到
dict()
,可以将其转换为
词典:

现在,
字典
的内容是:

{'channel3': ' c3', 'channel1': ' c1', 'channel2': ' c2'}

下面是如何读取数据并从中创建dict

除了从文件中读取数据外,
csv
读卡器还可以从字符串列表中读取数据,这对于这样的代码示例来说非常方便。对于数据,您需要指定
skipinitialspace=True
跳过逗号后的空格

import csv

data = '''\
list_name, search_criteria
channel1, c1
channel2, c2
channel3, c3
'''.splitlines()

dictReader = csv.DictReader(data, skipinitialspace=True)

main_dict = {}
for row in dictReader:
    name = row['list_name'] + '_channel_list'
    criteria = row['search_criteria']
    main_dict[name] = criteria

# Print data sorted by list_name
keys = sorted(main_dict)
for k in keys:
    print(k, main_dict[k])
输出

channel1_channel_list c1
channel2_channel_list c2
channel3_channel_list c3

这段代码比JoeIddon的版本稍微复杂一点,但是如果每行有两个以上的条目,就更容易适应。OTOH,如果您每行只有两个条目,那么您可能应该使用Joe的更简单方法。

不要创建列表列表,请使用名称和键创建列表。谢谢。我是一个python新手,不知道如何做到这一点。你能举个例子吗?如果下面的答案之一解决了你的问题,你应该接受它(单击相应答案旁边的复选标记)。这有两件事。它让每个人都知道你的问题已经解决到令你满意的程度,并让帮助你的人相信你的帮助。有关完整的解释,请参见。+1对于聪明的
skipinitialspace
,我只使用了
csv
模块几次,这是一个很酷的技巧(当然还有提到我:)
channel1_channel_list c1
channel2_channel_list c2
channel3_channel_list c3