2012-06-07 84 views
0

我列出比較列表 - 刪除列表,其中ID = ID和日期>日期

[['Id', 'fname', 'lname', 'gender', 'startdate'], 
['100', 'John', 'Jackson', 'M', '08/09/2000'], 
['101', 'Jenny', 'Hobbs', 'F', '01/13/1995'], 
['100', 'John', 'Jackson', 'M', '08/09/1995']] 

的名單我想刪除重複的名單,其中ID == ID和起始日期<起始日期。 使用具有最近startdate的唯一ID保留列表。

[['Id', 'fname', 'lname', 'gender', 'startdate'], 
['100', 'John', 'Jackson', 'M', '08/09/2000'], 
['101', 'Jenny', 'Hobbs', 'F', '01/13/1995']] 

任何幫助將通過ID日期順序排序後,他們是偉大的

+2

這應該是類型的字典 – Daenyth

回答

4

東西行到字典中。你必須做的唯一事情就是在使用這個之前刪除標題。

import time 

data = [['100', 'John', 'Jackson', 'M', '08/09/2000'], 
['101', 'Jenny', 'Hobbs', 'F', '01/13/1995'], 
['100', 'John', 'Jackson', 'M', '08/09/1995']] 

data = sorted(data, key=lambda x:time.strptime(x[4], '%m/%d/%Y')) # sort data in ascending date order 

keys = [x[0] for x in data] 
print keys 

d = dict(zip(keys,data))     # add to dictionary ... most recent values overwrite older ones 

print d.values() 

生成輸出:

[['100', 'John', 'Jackson', 'M', '08/09/2000'], ['101', 'Jenny', 'Hobbs', 'F', '01/13/1995']] 
+0

的名單似乎是一個偉大的方式來刪除重複,但問題有更多刪除重複ID的標準。謝謝 – JonDog

+0

這也解決了數據需求以及...我錯過了什麼? –

+0

由於某些原因,日期格式錯誤'mm/dd/yyyy' – JonDog

0

這裏是另一種解決方案。我只是把鑰匙放進一套,因爲我發現它們。 orig變量包含列表的原始列表,並且res是被刪除重複的列表的列表。

mod_set = set() 
res = list() 
for x in orig: 
    if x[0] not in mod_set: 
      res.append(x) 
      mod_set.add(x[0]) 
0

這裏是一個小腳本,做你想要什麼:

import time 

mylist = [['100', 'John', 'Jackson', 'M', '08/09/2000'], 
['101', 'Jenny', 'Hobbs', 'F', '01/13/1995'], 
['100', 'John', 'Jackson', 'M', '08/09/1995']] 

dict = {} 
for sublist in mylist: 
    id,fname,lname,gender,startdate = sublist 
    if not id in dict: 
     dict[id] = [fname,lname,gender,startdate] 
    else: 
     olddate = dict[id][3] 
     if time.strptime(startdate,'%d/%m/%Y') > time.strptime(olddate,'%d/%m/%Y'): 
     dict[id] = [fname,lname,gender,startdate] 

print dict 

Output: {'100': ['John', 'Jackson', 'M', '08/09/2000'], '101': ['Jenny', 'Hobbs', 'F', '01/13/1995']} 

在結束dict會包含指向最近的記錄唯一的ID。

1

到@Maria Zverina的相似,但有點更有條理:

import time 

data = [ 
    ['100', 'John', 'Jackson', 'M', '08/09/2000'], 
    ['101', 'Jenny', 'Hobbs', 'F', '01/13/1995'], 
    ['100', 'John', 'Jackson', 'M', '08/09/1995'] 
] 

# sort by date, ascending 
data.sort(key=lambda d: time.strptime(d[4], "%m/%d/%Y")) 

# load into a dict, key on ID, later data overwrites earlier 
latest = dict((d[0], d) for d in data) 

# return to list, sorted by ID 
data = sorted(latest.itervalues(), key=lambda d: int(d[0])) 

回報

# most recent data for each ID, sorted by ID: 
[ 
    ['100', 'John', 'Jackson', 'M', '08/09/2000'], 
    ['101', 'Jenny', 'Hobbs', 'F', '01/13/1995'] 
] 
+0

+1加載字典的好方法:) –