排序Python列表

排序Python列表,python,Python,我的代码排序有问题 def generateList(attendeeList, criteria, workshoptitle): for i in attendeeList: if(criteria == 'Workshop1'): criteria = 'Workshop B' if(i['session1'] == criteria ): temp = [] temp.append((

我的代码排序有问题

def generateList(attendeeList, criteria, workshoptitle):
    for i in attendeeList:
        if(criteria == 'Workshop1'):
        criteria = 'Workshop B'
        if(i['session1'] == criteria ):
            temp = []
            temp.append((i['lastname']))
            temp.sort()
            print(temp)
输出不按姓氏排序

['Smith']
['Robertson']
['Lovelace']
['Yu']

每次通过循环时,您只是打印一个列表,其中包含一个项目

temp = [] # empty list
temp.append((i['lastname'])) # list with one element
temp.sort() # list is already sorted (since it just has one element)
print(temp)
也许你想要这样的东西:

def generateList(attendeeList, criteria, workshoptitle):
    lastnames = []
    for i in attendeeList:
        if(criteria == 'Workshop1'):
            criteria = 'Workshop B'
        if(i['session1'] == criteria ):
            lastnames.append(i['lastname'])
    lastnames.sort()
    print(lastnames)
编辑

更惯用的Python,并返回列表而不是打印列表:

def generate_list(attendee_list, criteria, workshop_title):
    if criteria == 'Workshop1':
        criteria = 'Workshop B'
    return sorted(attendee['lastname'] for attendee in attendee_list
                  if attendee['session1'] == criteria)

每次通过循环时,您只是打印一个列表,其中包含一个项目

temp = [] # empty list
temp.append((i['lastname'])) # list with one element
temp.sort() # list is already sorted (since it just has one element)
print(temp)
也许你想要这样的东西:

def generateList(attendeeList, criteria, workshoptitle):
    lastnames = []
    for i in attendeeList:
        if(criteria == 'Workshop1'):
            criteria = 'Workshop B'
        if(i['session1'] == criteria ):
            lastnames.append(i['lastname'])
    lastnames.sort()
    print(lastnames)
编辑

更惯用的Python,并返回列表而不是打印列表:

def generate_list(attendee_list, criteria, workshop_title):
    if criteria == 'Workshop1':
        criteria = 'Workshop B'
    return sorted(attendee['lastname'] for attendee in attendee_list
                  if attendee['session1'] == criteria)

你的代码没有达到你的目的。即使在每次获得项目时都打印该项目,也会在每次迭代时生成一个空列表

要在循环之前,在函数体中创建列表,然后附加到它,然后对它进行排序,如果要另外打印它,则要遍历它:

def generateList(attendeeList, criteria, workshoptitle):
    temp = []

    if criteria == 'Workshop1':
        criteria = 'Workshop B'

    for i in attendeeList:
        if i['session1'] == criteria :
            temp.append(i['lastname'])

    temp.sort()

    for item in temp:
        print(item)

    return temp
在IPython中运行的示例:

In [7]: generateList([dict(session1="Workshop B",lastname="test1"), dict(session1="Workshop A", lastname="test2"), dict(session1="Workshop B", lastname="test3")], "Workshop1", ...)

test1
test3

Out[7]: ['test1', 'test3']

你的代码没有达到你的目的。即使在每次获得项目时都打印该项目,也会在每次迭代时生成一个空列表

要在循环之前,在函数体中创建列表,然后附加到它,然后对它进行排序,如果要另外打印它,则要遍历它:

def generateList(attendeeList, criteria, workshoptitle):
    temp = []

    if criteria == 'Workshop1':
        criteria = 'Workshop B'

    for i in attendeeList:
        if i['session1'] == criteria :
            temp.append(i['lastname'])

    temp.sort()

    for item in temp:
        print(item)

    return temp
在IPython中运行的示例:

In [7]: generateList([dict(session1="Workshop B",lastname="test1"), dict(session1="Workshop A", lastname="test2"), dict(session1="Workshop B", lastname="test3")], "Workshop1", ...)

test1
test3

Out[7]: ['test1', 'test3']

哦,那是因为我的临时工在循环中吗?所以它每次都在重新创建变量,并在其中放置一个变量,然后重复?@MuthaCluffer是的exactly@MuthaCluffer是的,你每次都给
temp
分配一个新的空列表。手掌到额头,doh!非常感谢你!哦,那是因为我的临时工在循环中吗?所以它每次都在重新创建变量,并在其中放置一个变量,然后重复?@MuthaCluffer是的exactly@MuthaCluffer是的,你每次都给
temp
分配一个新的空列表。手掌到额头,doh!非常感谢你!