1022 Digital Library (30 分)python

A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you are supposed to output the resulting books, sorted in increasing order of their ID’s.
Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer N (≤10​4​​) which is the total number of books. Then N blocks follow, each contains the information of a book in 6 lines:

Line #1: the 7-digit ID number;Line #2: the book title -- a string of no more than 80 characters;Line #3: the author -- a string of no more than 80 characters;Line #4: the key words -- each word is a string of no more than 10 characters without any white space, and the keywords are separated by exactly one space;Line #5: the publisher -- a string of no more than 80 characters;Line #6: the published year -- a 4-digit number which is in the range [1000, 3000].

It is assumed that each book belongs to one author only, and contains no more than 5 key words; there are no more than 1000 distinct key words in total; and there are no more than 1000 distinct publishers.

After the book information, there is a line containing a positive integer M (≤1000) which is the number of user’s search queries. Then M lines follow, each in one of the formats shown below:

1: a book title2: name of an author3: a key word4: name of a publisher5: a 4-digit number representing the year

Output Specification:

For each query, first print the original query in a line, then output the resulting book ID’s in increasing order, each occupying a line. If no book is found, print Not Found instead.

这道题我使用python来写,和大家学习一下,首先我们先补充几个知识点判断字典的key是否存在我们使用dict.get(key)是返回1,不是返回0

我们还可以直接使用setdefault方法,如果key存在我们就什么都不做,如果key不存在就创建一个key

要知道value是可以一个列表,所以我们将符合这个要搜索的添加到这个列表中


逻辑分析:
首先我们创建一个列表字典,及有多个字典类型的列表,我们将搜索的关键字作为键(key)所映射出的对应书的ID号,这样我们只要访问关键字就可以得到对应的结果。因为每本书都有六个标签,所以我们创建五个字典。代表五种属性。

当我们每一本输入,就将对应的属性中添加书的特性并映射书名,比如输入
3
1111111
The Testing Book
Yue Chen
test code debug sort keywords
ZUCS Print
2011
3333333
Another Testing Book
Yue Chen
test code sort keywords
ZUCS Print2
2012
2222222
The Testing Book
CYLL
keywords debug book
ZUCS Print2
2011

保存在字典里的数据是这样的
1: a book title
{‘The Testing Book’: [‘1111111’, ‘2222222’], ‘Another Testing Book’: [‘3333333’]}

2: name of an author
{‘Yue Chen’: [‘1111111’, ‘3333333’], ‘CYLL’: [‘2222222’]}

3: a key word
{‘test’: [‘1111111’, ‘3333333’], ‘code’: [‘1111111’, ‘3333333’], ‘debug’: [‘1111111’, ‘2222222’], ‘sort’: [‘1111111’, ‘3333333’], ‘keywords’: [‘1111111’, ‘3333333’, ‘2222222’], ‘book’: [‘2222222’]}

4: name of a publisher
{‘ZUCS Print’: [‘1111111’], ‘ZUCS Print2’: [‘3333333’, ‘2222222’]}

5: a 4-digit number representing the year
{‘2011’: [‘1111111’, ‘2222222’], ‘2012’: [‘3333333’]}

我们处理a key word需要单独判断,因为一本书可能有不同的关键词,不像其他属性只有唯一个,我们使用split将关键分开。

最后我将要输出的ID号先排序,再逐个输出。

n = int(input(""))data = [{}, {}, {}, {}, {}]#数据存放for i in range(n):#输入书籍    id = input("")#书籍的id号    for j in range(5):#书籍对应的属性        belong = input("")#书籍属性        if j == 2:#单独判断a key word ,其他属性对于书是唯一的,但写法一样。            for keys in belong.split(' '):#a key word分成若干关键字                try:                    data[j][keys].append(id)#存在将id添加对应关键字中                except:                    data[j].setdefault(keys, [id])#不存在就创建关键字            continue        try:            data[j][belong].append(id)#同上        except :            data[j].setdefault(belong,[id])            n=int(input(""))for i in range(n):#查找    find=input("")    print(find)    if(data[int(find[0])-1].get(find[3:])):#如果找到才输出        data[int(find[0])-1][find[3:]].sort()#先排序        for id in data[int(find[0])-1][find[3:]]:#逐个输出            print(id)    else:#找不到就输出Not Found        print("Not Found")

希望对大家有帮助吧来源:https://www.icode9.com/content-1-849901.html

(0)

相关推荐

  • 近5年高考完形填空真题 最全解题技巧,看完再涨30分!

    近5年高考完形填空真题 最全解题技巧,看完再涨30分!

  • 【外语】近5年高考完形填空真题 最全解题技巧,看完再涨30分!

    [高中外语] 1 误 区 1. 完形填空是语法词汇题 ❌ 语法主要考定语从句,同位语从句,状语从句,语法变化较慢,词汇的发展较快,所以语法考的越来越少. 完形填空选的是最佳答案而不是最正确答案,对词汇 ...

  • 每天30分瑜伽腹部体式训练,不累也能瘦!

    大家好,我是中印瑜伽学院丨教练培训部小芩老师,今天我给大家带来一组夏天针对瑜伽腹部体式排课和练习~ 今天教大家一组瑜伽腹部核心体式训练法,大家在家就可以练习,夏天穿裙子的时候就要到啦,每天练习30分钟 ...

  • 1个月,从30分到100分的逆袭

    我是一个教书匠~ 每天1个学习.教育.生活的干货 这是灰灰龙的第212篇原创文章 ↑↑点击上方蓝字关注我哈~ 这周上课,得到一个让人振奋人心的好消息: 经过这一个月的讲题,天天讲,有两个孩子从上次的月 ...

  • 30分钻戒价格多少钱?保值性怎么样?

    情到深处,三生三世的唯美许诺,是多少情侣最梦寐以求的爱情誓言.一枚30分钻戒,不仅展现了隽永与深情,同时也印记了三生三世的美好希冀.越来越多的年轻人会选择简约闪耀的30分钻戒来见证婚姻,那么,30分钻 ...

  • 高考蒙题技巧大全,看完多考30分!

    高考是一场很重要的考试,也是一个有难度的考试. 除非你是超级学霸,否则高考中遇到一些不会做的题是很正常的. 但是不会做怎么办呢?谨记:绝对不能留白!!!不会的蒙也要填上! 今天跟大家分享的是一些实用的 ...

  • 《46》30分K线(超短)

     30分钟K线(超短线.短线操作依据) 一.30分钟K线要义     1.炒股其实就是:发现买点就进,发现卖点就跑.     2.30分钟K线图是判断短期大盘以及个股的有利武器,它兼具超短线和短线的优 ...

  • 高中英语考试所有题型解题技巧全攻略,掌握住,至少提高30分!

    为了让同学们在考试中被少扣分甚至不扣分,小简老师总结了高中英语考试所有题型的超详细解题技巧和方法,快快收藏起来好好研究吧! 听力 高中英语听力测试部分在整套试题中占有重要地位.它要求大家从头到尾按顺序 ...

  • 30个Python常用极简代码,拿走就能用

    作者丨Fatos Morina 来源丨Python 技术 导读 本文是 30 个极简任务,初学者可以尝试着自己实现:本文同样也是 30 段代码,Python 开发者也可以看看是不是有没想到的用法. 学 ...