2012-12-12 63 views
3

我有一個問題,在此代碼的某些部分保持值與其對應關聯。我試圖只打印出具有最低優先級的票證代碼。我遇到的第一個問題是,當有人沒有輸入優先級時,它默認爲「無」。所以在我過濾出來之後,我想把剩下的數據放入一個列表中,然後從該列表中獲取最小優先級並將其與打印機代碼一起打印出來。排序for循環的結果時保持值連接

數據集的樣子:

ticket ticket code     ticket priority 
100_400 100_400 ticket description  None 
100_400 100_400 ticket description   5 
100_400 100_400 ticket description   1 
100_400 100_400 ticket description   2 
100_400 100_400 ticket description   4 
100_400 100_400 ticket description   3 

所以目前這是我的代碼是什麼樣子:

result = set() 
for ticket in tickets: 
# to get rid of the "None" priorities 
    if ticket.priority != '<pirority range>': 
     print "" 
    else: 
     #this is where i need help keeping the priority and the ticket.code together 
     result.add(ticket.priority) 

print min(result) 
print ticket.code 
+0

什麼是票?它是一些類的實例嗎? – alexvassel

+0

如果2張票具有相同的優先級,會發生什麼?如果這是不可能的?如果所有的門票都是「無」,會怎麼樣? –

+0

可以獲得兩張具有相同優先級的門票,如果所有門票都沒有,我可以打印「沒有爲此門票設置優先級的門票說明」 – Sjadow

回答

2

添加整個ticketresult列表,而不是僅僅的優先級,然後實現你自己的min函數。另外,根據您的其他應用,考慮使用與set不同的結構來獲得結果?

# this computes the minimum priority of a ticket 
def ticketMin (list): 
    min = list[0] 
    for ticket in list: 
     if (ticket.priority < min.priority): 
      min = ticket 
    return min 

# changed set to list 
result = list() 
for ticket in tickets: 
# to get rid of the "None" priorities 
    if ticket.priority != '<pirority range>': 
     print "" 
    else: 
     #notice the change below 
     result.append(ticket) 

# changed 'min' to 'ticketMin' 
minTicket = ticketMin(result) 

print minTicket.priority 
print minTicket.code 

或者,你可以節省幾行,並使用內置的功能與LAMBDA,奧斯卡在評論中所示:

# changed set to list 
result = list() 
for ticket in tickets: 
# to get rid of the "None" priorities 
    if ticket.priority != '<pirority range>': 
     print "" 
    else: 
     #notice the change below 
     result.append(ticket) 

# Oscar's solution: 
minTicket = min(result, key=lambda val : val.priority) 

print minTicket.priority 
print minTicket.code 
+0

此解決方案通過定義「門票打印」功能重新發明了方向盤,這裏的實際方法是使用'min'內置函數,就像在我的回答 –

+0

@ÓscarLópez中那樣,我根據您的建議更新了我的答案。 – weberc2

2

添加門票result集,而不是他們優先級。然後找到集合中最低優先級的票,如下所示:

minTicket = min(result, key=lambda x : x.priority)