用python编程,给出文章名,年份,出版社,第一作者第二作者等,要求类似于...

发布网友 发布时间:2022-04-23 16:35

我来回答

2个回答

热心网友 时间:2022-04-07 09:49

我最开始的想法是和楼上一样的想法,但是实际操作中发现了一些问题。
首先,楼主给的csv文件本身是参差的,所以只能用csv.reader取得一行的list,需要自己去解析
然后,800个的数据量也不算太小,用dict建立索引的话效率不会太高
综上,我的想法是数据结构用一个保存作者名的set和保存2位有共同著作的作者的set,这样占用的空间也比较小,然后建立表格也比较简单。
不过实现需要一点时间,晚上回家之后试着写写看吧。不过800个确实挺多,显示出来的表能有多大啊。

-----------------------------------------------------------------------------------
import csv
import itertools
if __name__ == '__main__':
reader = csv.reader(open('books.csv'))
authors = set()
pairs = set()
for line in reader:
list = line[3:]
if list[0] == 'column1': continue
if '' in list : list.remove('')
for str in list: authors.add(str)
for pair in itertools.combinations(list, 2): pairs.add(pair)
line = ''
for author1 in authors:
line += '\t' + author1
print(line)
for author1 in authors:
line = author1
for author2 in authors:
line += '\t' + ('X' if author1 == author2 else '1' if ((author1, author2) in pairs or (author2, author1) in pairs) else '0')
print(line)

我写的,从楼上的代码学习到了itertools.combinations的用法,感谢。
代码修改了一次,我被某种一切都是对象的语言控制了,不用类不舒服斯基。现在这样看舒服多了。

热心网友 时间:2022-04-07 11:07

1.读数据:使用csv模块读入或者自己写reader
2.建立索引:使用dict,以著作名为key,如果有相同的著作的作者加到这个key的value里面。追问能把详细的过程写一下么?思路大概都清楚,就是不太会用python的语句写

追答import csv
import itertools

a = csv.DictReader(open("d:\\tt.csv"))
authorPairs = []
for line in a:
authors = [line['column%s'%(i+1)] for i in range(5)]

for p in itertools.combinations([s for s in authors if s!=None], 2):
authorPairs.append(p)

print authorPairs

得到所有的作者对,然后按你自己要求在矩阵里面标记就可以了。结果里面没有去重,因为没说明是否需要计数。如果需要去重,用set去一下就行了。
回楼下:
800行记录数据量很小了,出来的矩阵应该是个稀疏矩阵,所以没必要用矩阵来存放。用list存储tuple就行了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com