【面试总结-编程】多行两列数据,实现同key的value求和并输出
一个文件,两列,多行。
第一列是字母,第二列是数字,同列数据之间通过空格分割。
统计首列字母相同的第二列之和。
样例输入:
A 5
B 6
OO 7
A 6
A 2
OO 2
输出:
A:13
B:6
OO:9
面试官要求30分钟内实现,python,C++实现。
夸下5分钟写完一种语言海口的我花了18分钟睡觉……(晕)
然后开始整理思路,一开始写了很久vector+查找算法的(因为考虑map插入会导致覆盖),写了半天发现……太复杂了,而且查找算法确实应用的不熟练。后来转变一下思路map可以取出原来的值再加进去。。我去
捡起来半生不熟的map用法。。
思路就是:整个数据看作key-value结构,map的特性就是如果找一个不存在的,会自动插入并赋值默认值。value求和只需要找出对应key的map元素,取出当前的value(如果没有,int之类的默认是0),和新value相加后再塞回去。python直接利用字典这个结构即可。
1 #include<map> 2 #include<string> 3 #include<iostream> 4 #include<fstream> 5 #include<sstream> 6 7 using namespace std; 8 9 typedef double datatype; 10 11 template<typename T> 12 void Stringtoother(string str, T &result)//编写的模板函数供之后重用,实现字符串到任意类型(如果可以)的转换 13 { 14 istringstream is(str); 15 is >> result; 16 } 17 18 int main(int argc, char** argv) { 19 map<string, datatype> mp;//声明最终存储的map 20 21 ifstream in("D:\\test.txt");//测试样例,完全符合要求的情况下测试正常(未考虑文件出错的情况) 22 23 //ifstream in(argv[1]);//实际的路径,可以通过cmd读取 24 25 if (in.fail()) 26 { 27 cout << "文件打开失败!" << endl; 28 system("pause"); 29 return -1; 30 } 31 32 string s;//文件读取每一行存储到的字符串 33 mp.clear(); 34 while (getline(in, s)) 35 { 36 int tag = s.find(" "); 37 string temp1, temp2; 38 temp1 = s.substr(0, tag - 1); 39 temp2 = s.substr(tag + 1, s.size()); 40 41 int value = 0; 42 Stringtoother(temp2, value); 43 mp[temp1] += value;//键值先读取原来的,然后再相加后覆盖 44 45 } 46 47 map<string, datatype>::iterator it;//最终结果输出 48 for (it = mp.begin(); it != mp.end(); it++) { 49 cout << it->first << ":" << it->second << endl; 50 } 51 52 system("pause"); 53 return 0; 54 }
python实现
1 def readFile(path): 2 dict_data={} 3 with open(path,'r') as df: 4 for kv in [d.strip().split(' ') for d in df]: 5 temp=dict_data.get(kv[0],0) 6 dict_data[kv[0]]=float(kv[1])+temp 7 return dict_data; 8 9 test_data={} 10 test_data=readFile("D:\\test.txt") 11 print(test_data)
凉凉

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
一个完整的机器学习项目在Python中演练(三)
大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习。但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中。就像你的脑海中已经有了一块块”拼图“(机器学习技术),你却不知道如何讲他们拼起来应用在实际的项目中。如果你也遇见过同样的问题,那么这篇文章应该是你想要的。本系列文章将介绍一个针对真实世界实际数据集的完整机器学习解决方案,让你了解所有部分如何结合在一起。 本系列文章按照一般机器学习工作流程逐步进行: 数据清洗与格式处理 探索性数据分析 特征工程和特征选取 机器学习模型性能指标评估 微调最佳模型(超参数) 在测试集上评估最佳模型 解释模型结果 总结分析 通过完成所有流程,我们将看到每个步骤之间是怎么联系起来的,以及如何在Python中专门实现每个部分。该项目在GitHub上可以找到,附实现过程。本篇文章将详细介绍第四-五个步骤,剩下的内容将在后面的文章中介绍。前三个步骤详见:数据清洗与格式处理、探索性数据分析、特征工程和特征选取。 模型评估和模型选择 需要时刻注意的是,我们正在解决的是一项有监督回归任务:使用纽约市建筑的能源数据,...
-
下一篇
浅谈Gradle(二)与SourceSets
之前写过了一篇Gradle(一),那是根据别人写的文章总结写的,当时其实还是很多不懂,包括我现在对gradle的理解也其实还是似懂非懂,但是还是要写,每次写完之后包括再重新多看几次,都会有新的感悟。然后我想说的是关于Gradle的文章,其实网上写得好的并不是很多,就那一两篇写得比较好,然后其他都是千篇一律,还是比较建议就是看官方的文档,但是官方的文档其实有时候也读不懂他说的到底是个什么意思,所以我这里比较推荐两本书:《Android Gradle权威指南》和《Gradle of Android 中文版》 其实这两本书也并不是把所有的东西都讲得很清楚,但是读之后会至少有个概念。当然如果以前没接触脚本的话估计看一遍还是看不懂,包括我其实看了很多一样的内容,但是现在也还有很多不知道。 一.Gradle 相关的内容比较多,我就不一点一点开始讲,就贴个别人写好的文章出来,但我个人还是比较建议去看书https://www.cnblogs.com/ut2016-progam/p/5871430.html 1.gradle gradle是什么呢,我个人简单的理解就是他是一个构建工具,他有个特性是约定优...
相关文章
文章评论
共有0条评论来说两句吧...