功能:读取文件,然后将多个项目添加到字典中

时间:2016-11-12 18:29:42

标签: python python-3.x dictionary

尝试创建一个函数来读取文件并将其他多个项目添加到有组织的字典中,然后返回它而不更改原始字典。不确定我是否正确使用多个项目和值。

返回:

{'Leonardo da Vinci': [("Portrait of Isabella d'Este", 1499, 63.0, 46.0, 'chalk', 'France'), ('The Last Supper', 1495, 460.0, 880.0, 'tempera', 'Italy')], 'Pablo Picasso': [('Guernica', 1937, 349.0, 776.0, 'oil paint', 'Spain')]}

示例文件:

file1='''"Artist","Title","Year","Total Height","Total Width","Media","Country"
"Pablo Picasso","Guernica","1937","349.0","776.0","oil paint","Spain"
"Leonardo da Vinci","The Last Supper","1495","460.0","880.0","tempera","Italy"'''

我到目前为止的代码:

def add_work (db,artist,title,year,height,width,media,country):
db = {}
    with open(filename) as f:
    for line in f:
        (title, year, height, width, media, country) = line.split()
        db[int(artist)] = (title, year, height, width, media, country)
        for i in d.keys():
            if i == artist #If artist in dictionary, then add it to item.
                db[i].extend
            elif i == title #If it has the same title as in the database, its a duplicate so return none.
                return None
add_work(d1,"Leonardo   da  Vinci","Portrait of Isabella d'Este", 1499, 63.0,46.0, "chalk", "France")

限制:

  1. Asciibetical order:以ASCII格式排序 整理的顺序而不是字母顺序。

  2. 没有导入/集合/模块。只是基本的内置函数,循环和dict方法。

1 个答案:

答案 0 :(得分:1)

正如我们在评论中所讨论的那样,你的主要问题是找出将新画作放在艺术家画作清单中的位置。

在我看来,这是一种家庭作业问题,因为在现实世界环境中没有理由存在这些限制。因此,我不打算给你完整的解决方案,但指出你正确的方向(至少我会尝试)。

您的算法应如下所示:

  1. 获取一个字典,其中以艺术家的名字作为关键字,并将他的绘画列表作为值。每幅画都包含titleyearheightwidthmediacountry

  2. 鉴于一组新的artisttitleyearheightwidthmedia和{{1}你检索那些艺术家工作的清单。

  3. 现在您的问题是找出添加新绘画的位置(如果它尚不存在)。

  4. 您可以浏览上述列表中的所有画作。对于每个条目,您使用下面的country功能检查是否应在当前title之前插入新作品的title。如果是(compare_to),则插入它。如果结果为-1,则它已在列表中并返回字典。如果结果为0,则转到列表的下一个项目。如果没有其他项目,请将其追加到最后。

  5. 这是1函数:

    compare_to

    我不知道你在比较中如何处理数字,可以随意将它们添加到def compare_to(string_1, string_2): """ This functions returns -1 if string_1 should be inserted before string_2, 0 if the strings are the same (in which case it doesn't matter - or this shouldn't happen) and 1 if string_1 is supposed to be inserted after string_2. """ abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" if string_1 == string_2: return 0 for i in range(min(len(string_1), len(string_2))): if abc.index(string_1[i]) < abc.index(string_2[i]): return -1 # The strings are not the same, the shorter one should come first if len(string_2) > len(string_1): return -1 return 1 变量。