我有一个包含数据的文件,我希望根据第一列中的值将其分成不同的列表.我确切地知道第一列中可能的值是什么,但它们没有任何好的数学进展.是否有更短的方法来编写以下代码?
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方式来编码这个跟随我的思路如上所述.
使用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)
我建议你转
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)