Python 与字典搏斗

Python 与字典搏斗,python,dictionary,Python,Dictionary,如果有人能帮我解决以下问题,我将不胜感激 编写一个函数,该函数接受包含由空格分隔的单词的字符串,并创建一个字典,其中键对应于字符串中单词的最后一个字符,而相关值对应于以该字符结尾的单词列表 此外,列表必须按字典顺序排序 范例 string = "This will be an amazing experience" 应返回以下词典 {'s':['This'], 'l':['will'], 'e':['be', 'experience'], 'n':['an'], 'g':['amazing']

如果有人能帮我解决以下问题,我将不胜感激

编写一个函数,该函数接受包含由空格分隔的单词的字符串,并创建一个字典,其中键对应于字符串中单词的最后一个字符,而相关值对应于以该字符结尾的单词列表

此外,列表必须按字典顺序排序

范例

string = "This will be an amazing experience"
应返回以下词典

{'s':['This'], 'l':['will'], 'e':['be', 'experience'], 'n':['an'], 'g':['amazing']}
我知道该如何解决这个问题。然而,考虑到我仍然是Python的初学者,我很挣扎

我做的第一件事就是创建一个空字典。其次,我使用split方法将字符串转换为一个列表。之后,我创建了另一个列表,它接受第一个字符串列表中单词的最后一个字符,并将其放入新列表中

我使用dict将第二个列表中的元素作为键放入我的字典中,这非常有效。问题是我无法将对应单词的列表作为值

这是我的密码:

def dictionary (string):

    mydict = {}
    mylist = string.split()
    mylist2 = []

    for word in mylist:

        mylist2.append(word[-1])
        mydict = dict((el,(word[-1] for word[-1] in mylist)) for el in mylist2)

    return mydict

您不需要两个列表,算法非常简单:

草签一张空的口述 把句子分成几个字 循环读单词 获取单词的最后一个字符,这是dict的关键 检查dict中是否已经存在该密钥,如果不存在,则使用空列表初始化该密钥 将这个词附加到所述列表中
有很多方法可以使用or来缩短,但这是基本思想。

您不需要两个列表,算法非常简单:

草签一张空的口述 把句子分成几个字 循环读单词 获取单词的最后一个字符,这是dict的关键 检查dict中是否已经存在该密钥,如果不存在,则使用空列表初始化该密钥 将这个词附加到所述列表中 有很多方法可以使用or来缩短,但这是基本思想。

您可以使用a来创建一个带有默认值的空列表的字典。然后,在迭代单词列表时,可以提取最后一个字符作为键,并将单词添加到该键的值列表中

import collections

def dictionary(string):

    #Dictionary with default value as empty list
    mydict = collections.defaultdict(list)

    #Iterate over list of words
    for word in string.split():

        #Take last character and add word to the value list for that character
        last_char = word[-1]
        mydict[last_char].append(word)

    return dict(mydict)

print(dictionary("This will be an amazing experience"))
输出将是

{'s': ['This'], 'l': ['will'], 'e': ['be', 'experience'], 'n': ['an'], 'g': ['amazing']}
您可以使用创建具有默认值的空列表的词典。然后,在迭代单词列表时,可以提取最后一个字符作为键,并将单词添加到该键的值列表中

import collections

def dictionary(string):

    #Dictionary with default value as empty list
    mydict = collections.defaultdict(list)

    #Iterate over list of words
    for word in string.split():

        #Take last character and add word to the value list for that character
        last_char = word[-1]
        mydict[last_char].append(word)

    return dict(mydict)

print(dictionary("This will be an amazing experience"))
输出将是

{'s': ['This'], 'l': ['will'], 'e': ['be', 'experience'], 'n': ['an'], 'g': ['amazing']}
st=这将是一次奇妙的体验 定义函数: d={} 对于圣斯普利特“”中的v: 如果v[-1]在d中: d[v[-1]]附录 其他: d[v[-1]]=[v] 返回d 打印函数 st=这将是一次奇妙的体验 定义函数: d={} 对于圣斯普利特“”中的v: 如果v[-1]在d中: d[v[-1]]附录 其他: d[v[-1]]=[v] 返回d 打印函数
对于词典排序部分,您需要记住对列表进行排序 生成它们之后:

my_string = "This will be an amazing experience"

def make_dict(string):
    my_dict = {}
    for word in string.split():
        my_dict.setdefault(word[-1], []).append(word)
    for l in my_dict.values():
        l.sort()
    return my_dict

print(make_dict(my_string))
另一种可能是建立堆,而不是列表,然后快速 从这些堆生成已排序的列表。根据您的具体用例,您的
里程数可能会有所不同。

对于词典排序部分,您需要记住对列表进行排序 生成它们之后:

my_string = "This will be an amazing experience"

def make_dict(string):
    my_dict = {}
    for word in string.split():
        my_dict.setdefault(word[-1], []).append(word)
    for l in my_dict.values():
        l.sort()
    return my_dict

print(make_dict(my_string))
另一种可能是建立堆,而不是列表,然后快速 从这些堆生成已排序的列表。根据您的具体用例,您的
里程数可能会有所不同。

您能添加一些文字信息吗?您的代码片段究竟如何帮助解决这个问题?能否添加一些文本信息?你的代码片段到底是如何帮助解决这个问题的?这确实帮助了我。有没有什么书或网站可以让你推荐阅读来学习这些东西?非常感谢你,我@alex108。不客气!我个人通过做很多项目和搜索问题来学习Python,我必须找到答案:。通常情况下,如果您有问题,其他人以前会问过-有时需要进行一些搜索才能找到问题,但随着您对Python语言的掌握程度的提高,这会变得更容易。我认为阅读整个Python官方文档会让我受益匪浅,您认为呢?你花了多长时间才精通Python?只是好奇而已。@alex108,我会说几个月——尽管我认为我永远不会停止学习Python和编程方面的新东西!。官方文件是一个很好的资源。如果你发现自己在使用re,我肯定会建议你阅读页面的说明性部分,比如re模块的文档,但我不确定你一次阅读就能从中获得多少好处——我个人总是通过在应用它们的过程中找出需要的东西来更好地学习。这真的帮助了我。有没有什么书或网站可以让你推荐阅读来学习这些东西?非常感谢你,我@alex108。不客气!我个人通过做很多项目和谷歌搜索我不得不解决的问题来学习Python
nd堆栈溢出答案:。通常情况下,如果您有问题,其他人以前会问过-有时需要进行一些搜索才能找到问题,但随着您对Python语言的掌握程度的提高,这会变得更容易。我认为阅读整个Python官方文档会让我受益匪浅,您认为呢?你花了多长时间才精通Python?只是好奇而已。@alex108,我会说几个月——尽管我认为我永远不会停止学习Python和编程方面的新东西!。官方文件是一个很好的资源。如果你发现自己在使用re,我肯定会建议你阅读页面的说明性部分,比如re模块的文档,但我不确定你从一次阅读中会获得多少好处——我个人总是通过在需要应用它们的时候弄清楚东西来学得更好。