2016-08-12 129 views
0

我在正确排序代码时遇到了问题。排序Python列表

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'] 

回答

3

通过每一次循环中,你只是打印在一个单一项目的列表。

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) 
+0

OH是因为我的温度是在循环内吗?那么它是否每次都重新创建变量并将其放入并重申? – MuthaCluffer

+0

@MuthaCluffer确切地说是 – Anonymous

+0

@MuthaCluffer是的,你每次都将一个新的空列表分配给'temp'。 – Tagc

0

您的代码没有做你想做的事。即使您每次打印该项目时,都会在每次迭代时生成一个空列表。

您希望循环之前创建的列表中,在函数体中,然后追加到它,然后对其进行排序,然后如果你想额外打印遍历它:

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']