使用list的名称作为访问列表的字符串

use*_*302 4 python list

我有一个包含数据的文件,我希望根据第一列中的值将其分成不同的列表.我确切地知道第一列中可能的值是什么,但它们没有任何好的数学进展.是否有更短的方法来编写以下代码?

x0=[]
y0=[]
x2=[]
y2=[]
x16=[]
y16=[]
# etc.

for line in file:
    words=line.split()
    if words[0] == '0':
        x0.append(words[1])
        y0.append(words[2])
    elif words[0] == '2':
        x2.append(words[1])
        y2.append(words[2])
    elif words[0] == '16':
        x16.append(words[1])
        y16.append(words[2])
    # etc.
Run Code Online (Sandbox Code Playgroud)

我的思考过程如下,但我定义的字符串(x和y)显然是字符串,并且不会引用我希望它们引用的列表.

x0=[]
y0=[]
x2=[]
y2=[]
x16=[]
y16=[]
# etc

for line in file:
    words=line.split()
    x='x'+words[0]
    y='y'+words[0]
    x.append(words[1])
    y.append(words[2])
Run Code Online (Sandbox Code Playgroud)

更新:我意识到可以用字典做这个,其中我的值将是一个列表列表,但主要是我很好奇是否有一个pythonic方式来编码这个跟随我的思路如上所述.

Sil*_*Ray 6

使用defaultdict而不是一堆单个值.

from collections import defaultdict
extracted_values = defaultdict(list)
for line in file:
    words = line.split()
    extracted_values['x' + words[0]].append(words[1])
    extracted_values['y' + words[0]].append(words[2])
Run Code Online (Sandbox Code Playgroud)

然后,您只需通过字典键而不是变量名访问您的值.

extracted_values['x0']
extracted_values['y1']
Run Code Online (Sandbox Code Playgroud)


NPE*_*NPE 5

我建议你转

x0=[]
x2=[]
x16=[]
Run Code Online (Sandbox Code Playgroud)

到一个字典:

x={'0':[], '2':[], '16':[]}
Run Code Online (Sandbox Code Playgroud)

然后,您可以参考各列表如x['0'],x['2']

特别是,您将能够for像这样重写循环:

for line in file:
    words = line.split()
    x[words[0]].append(words[1])
    y[words[0]].append(words[2])
Run Code Online (Sandbox Code Playgroud)