python - pythonic将列表转换为类字段的方法
问题描述
有没有更 Pythonic 的方式来将多个列表的内容分配到多个结构中的字段中?下面的示例使用pandas.dataframe
import pandas
# INPUT
files = ['file1.csv','file2.csv','file3.csv','file4.csv', 'file5.csv']
names = ['Cold', 'Hot','Hotter','Hottest','Hottestest']
lines = ['-','-',':','-',':']
colors = ['b','r','r','y','y']
marker = ['','','','o','']
cases = []
for idx,case in enumerate(files):
cases.append(pandas.read_csv(fname))
cases[idx].name = names[idx]
cases[idx].color = colors[idx]
cases[idx].marker = marker[idx]
cases[idx].lines = lines[idx]
解决方案
编辑:使用阿德里安的答案assign
,我们可以使用and来简化这个**kwargs
:
import pandas
# INPUT
file_map = {
'file1.csv': {
'name': 'Cold',
'lines': '-',
'colors': 'b',
'marker': ''
},
# ...etc...
}
cases = []
for filename, attrs in file_map.iteritems():
cases.append(pandas.read_csv(filename).assign(**attrs))
旧答案:
似乎字典的字典会更好。
import pandas
# INPUT
file_map = {
'file1.csv': {
'name': 'Cold',
'lines': '-',
'colors': 'b',
'marker': ''
},
# ...etc...
}
cases = []
for filename, attrs in file_map.iteritems():
case = pandas.read_csv(filename)
for attr, value in attrs.iteritems():
setattr(case, attr, value)
cases.append(case)
collections.namedtuple
如果您想对其更加严格,您还可以创建子图类或实例。
推荐阅读
- ios - Flutter - 带有搜索栏的自定义 sliver 应用栏
- javascript - 尝试使用 R Selenium 自动填充日期,但 sendKeyToElements() 不起作用
- reverse-proxy - MITM 代理 - 如何以反向代理模式从内部/外部 Web 应用程序服务器拦截用户请求
- javascript - 如果我使用 jQuery(document).ready(function(){ ... my code}) = undifined function
- flutter - 使用 Flutter 向下滚动时如何隐藏带有动画的小部件
- angularjs - 计算angularjs模板文件中的两个字段值总和
- mongodb - MongoDB 如何正确 $lookup 2 文档?
- javascript - javascript递归与while循环
- reactjs - Jest spyOn handleSubmit() 方法不存在
- firebase - 使用 Firebase Auth 进行自定义身份验证