在Python中按字母顺序排列多行值列表?

在Python中按字母顺序排列多行值列表?,python,list,sorting,tuples,Python,List,Sorting,Tuples,我有一份按以下格式组织的姓名和地址列表: Mr and Mrs Jane Doe Candycane Lane Magic Meadows, SC 我有几个数据块是这样写的,在本例中,我希望能够按照姓Doe的字母顺序排列每个数据块。在做了一些挖掘之后,我能想到的最好的办法就是我需要列出一个列表,然后用姓氏作为一个键来按字母顺序排列块。然而,考虑到python的新鲜度和谷歌技能的缺乏,我能找到的最接近的方法是。我不知道如何将每个块转换为一个列表,然后对其进行切片;我似乎找不到这样做的方

我有一份按以下格式组织的姓名和地址列表:

Mr and Mrs Jane Doe  
Candycane Lane  
Magic Meadows, SC 

我有几个数据块是这样写的,在本例中,我希望能够按照姓Doe的字母顺序排列每个数据块。在做了一些挖掘之后,我能想到的最好的办法就是我需要列出一个列表,然后用姓氏作为一个键来按字母顺序排列块。然而,考虑到python的新鲜度和谷歌技能的缺乏,我能找到的最接近的方法是。我不知道如何将每个块转换为一个列表,然后对其进行切片;我似乎找不到这样做的方法,但仍然能够正确地按字母顺序排列。非常感谢您提供的任何指导。

如果我理解正确,您基本上希望通过对值(在本例中是提取的姓氏)进行一些计算来对值进行排序

为此,请使用key关键字参数进行.sort或sorted:

唯一的要求是您的关键函数是确定性的,即始终为每个给定输入返回相同的输出

您可能还希望先按姓氏再按姓氏排序:在本例中,只需返回一个元组last,first:如果两个给定项的last是相同的,则first将用于对这两个项进行进一步排序

使现代化 对于您的特定情况,此函数应执行以下操作:

def my_key_function(original_name):
    return original_name.splitlines()[0].split()[-1]

如果我理解正确的话,您基本上希望通过对值进行一些计算对值进行排序,在本例中是提取的姓氏

为此,请使用key关键字参数进行.sort或sorted:

唯一的要求是您的关键函数是确定性的,即始终为每个给定输入返回相同的输出

您可能还希望先按姓氏再按姓氏排序:在本例中,只需返回一个元组last,first:如果两个给定项的last是相同的,则first将用于对这两个项进行进一步排序

使现代化 对于您的特定情况,此函数应执行以下操作:

def my_key_function(original_name):
    return original_name.splitlines()[0].split()[-1]

您需要创建一个新的列表,其中每个条目都是一个元组,包含您想要的排序键以及所有内容。对该列表进行排序,然后获取排序中每个条目的第二个组件:

def get_sort_name (address):
    name, address, city = address.split('\n')
    return (name.split(' ')[-1] , address) # last item of first line & whole thing as tulle


keyed_list = map (get_sort_name, addresses)
keyed_list.sort()
sorted_addresses = [item[1] for item in keyed_list]

当然,使用lambdas可以更紧凑,但最好是可读性更好:

您希望创建一个新列表,其中每个条目都是一个元组,包含您想要的排序键和整个内容。对该列表进行排序,然后获取排序中每个条目的第二个组件:

def get_sort_name (address):
    name, address, city = address.split('\n')
    return (name.split(' ')[-1] , address) # last item of first line & whole thing as tulle


keyed_list = map (get_sort_name, addresses)
keyed_list.sort()
sorted_addresses = [item[1] for item in keyed_list]

当然,使用lambdas可以更紧凑,但最好是可读性更好:

假设您已经在列表中有了数据

l = ['Mr and Mrs Jane Smith\nCandycane Lane\nMagic Meadows, SC',
     'Mr and Mrs Jane Doe\nCandycane Lane\nMagic Meadows, SC',
     'Mr and Mrs Jane Atkins\nCandycane Lane\nMagic Meadows, SC']
您可以指定要排序的键

l.sort(key=lambda x: x.split('\n')[0].split(' ')[-1])

在这种情况下,获取最后一个字。在第一行拆分“”[-1]。拆分“\n”[0]

假设列表中已有数据

l = ['Mr and Mrs Jane Smith\nCandycane Lane\nMagic Meadows, SC',
     'Mr and Mrs Jane Doe\nCandycane Lane\nMagic Meadows, SC',
     'Mr and Mrs Jane Atkins\nCandycane Lane\nMagic Meadows, SC']
您可以指定要排序的键

l.sort(key=lambda x: x.split('\n')[0].split(' ')[-1])

在这种情况下,获取最后一个单词。在第一行拆分“”[-1]。拆分“\n”[0]

您当前的代码是什么样子的?按字母顺序排列是什么意思?按字母顺序排序…?是的,请原谅我不够清晰。你当前的代码看起来像什么?你说的字母顺序是什么意思?按字母顺序排序…?是的,请原谅我这方面不够清晰。正是我需要的。谢谢。我还没有足够的销售代表,但我会尽快的。正是我需要的。谢谢。我还没有足够的代表,但我会尽快。