请教一个在列表或者字典中取值相加的问题
有两个文件,想实现第一个文件所列出名字,在第二个文件中获取信息,如果第二个文件中没有记录则返回 no hit.其中第一个文件如下:
Sam
Tom
Billy
Fang
Yong
Bill
另外一个文件如下:
Sam,25
Sam,teacher
Sam,America
Tom,student
Tom,ITer
Billy,38
Billy,professor
Fang,famer
Yong,Phd
根据上述两个文件得到如下结果文件:
Sam, 25;teacher;America
Tom, student;ITer
Billy, 38;professor
Fang, famer
Yong, Phd
Bill, no hit
本来想用建立字典然后遍历取结果,可是字典同样的键只能对应一个值,没能实现。后来想构建列表,也没有运行出来。在此请教各位兄弟姐妹。
可以考虑使用字典中的值是列表的方式来组织数据。 回复 1# 雨久
印象中很久以前你也问过类似的问题,Python入门应该很快啊:em17:import io
infile1 = io.StringIO(
'''Sam
Tom
Billy
Fang
Yong
Bill
''')
infile2 = io.StringIO(
'''Sam,25
Sam,teacher
Sam,America
Tom,student
Tom,ITer
Billy,38
Billy,professor
Fang,famer
Yong,Phd
''')
def main():
name_db = {}
for line in infile2:
fields = line.rstrip().split(',')
if len(fields) == 2:
name_db.setdefault(fields, []).append(fields)
for line in infile1:
name = line.rstrip()
value = ';'.join(name_db) if name in name_db else 'no hit'
print(name, value, sep=',')
if __name__ == '__main__':
main()保存为test.py,执行:bash-3.2 $python --version
Python 3.3.4
bash-3.2 $python test.py
Sam,25;teacher;America
Tom,student;ITer
Billy,38;professor
Fang,famer
Yong,Phd
Bill,no hit 感谢timespace大神:wink::wink::wink:
平时没有努力学习啊,大神见笑了。
把代码改写如下,没有运行出来:dizzy:
import sys
def main():
if len(sys.argv) != 4:
sys.exit('usage: {} infile1 infile2 outfile'.format(sys.argv))
with open(sys.argv) as in1, open(sys.argv) as in2, open(sys.argv, 'w') as out:
name_db = {}
for line in in2:
fields = line.rstrip().split(',')
if len(fields) == 2:
name_db.setdefault(fields, []).append(fields)
for name in in1:
name = name.rstrip()
value = ';'.join(name_db) if name in name_db else 'no hit'
print >> out , name, ',',value
if __name__ == '__main__':
main() 回复 4# 雨久
报什么错?贴出内容
没有报错,只是除了no hit,其它的值都没有写进去,结果如下:
Sam
Tom
Billy
Fang
Yong
Bill, no hit
回复 6# 雨久
很容易就改为2.7版本的:from cStringIO import StringIO
infile1 = StringIO(
'''Sam
Tom
Billy
Fang
Yong
Bill
''')
infile2 = StringIO(
'''Sam,25
Sam,teacher
Sam,America
Tom,student
Tom,ITer
Billy,38
Billy,professor
Fang,famer
Yong,Phd
''')
def main():
name_db = {}
for line in infile2:
fields = line.rstrip().split(',')
if len(fields) == 2:
name_db.setdefault(fields, []).append(fields)
for line in infile1:
name = line.rstrip()
value = ';'.join(name_db) if name in name_db else 'no hit'
print '{},{}'.format(name, value)
if __name__ == '__main__':
main()运行:bash-3.2 $python2.7 test.py
Sam,25;teacher;America
Tom,student;ITer
Billy,38;professor
Fang,famer
Yong,Phd
Bill,no hit如果参考这个,还得不出结果,坦白说你不适合用Python,换个方向吧,可能更有效率。
非常感谢timespace,您提供的代码很好用。能得到想要的结果,谢谢!
页:
[1]