2016-11-03 2 views
-3

Ich habe eine Liste von Pfaden und Termine:Ältere Tupeln aus Liste

myList = [('Y:\\Resources\\Project 1', '2016-07'), 
      ('Y:\\Resources\\Project 1', '2016-08'), 
      ('Y:\\Resources\\Project 2', '2014-01'), 
      ('Y:\\Resources\\Project 3', '2015-12'), 
      ('Y:\\Resources\\Project 3', '2016-02'), 
      ('Y:\\Resources\\Project 3', '2013-08'), 
      ('Y:\\Resources\\Project 4', '2016-04')] 

Ich mag die Einzelteile mit älterem Datum entfernen und zurück:

newList = [('Y:\\Resources\\Project 1', '2016-08'), 
       ('Y:\\Resources\\Project 2', '2014-01'), 
       ('Y:\\Resources\\Project 3', '2016-02'), 
       ('Y:\\Resources\\Project 4', '2016-04')] 
+0

@Andy Es pro Projekt ist – mk8efz

Antwort

2

können Sie dict nutzen die einzigartigen Einheiten zu erstellen:

>>> my_dict = {} 
>>> for key, value in myList: 
...  if key in my_dict: 
...   if my_dict[key] < value: 
...    my_dict[key] = value 
...  else: 
...   my_dict[key] = value 
... 

wo myList hält den Wert, der Frage erwähnt wird. Um dict-list von tuples zu konvertieren, tun dict.items() als:

>>> new_list = my_dict.items() 
>>> new_list 
[('Y:\\Resources\\Project 4', '2016-04'), 
('Y:\\Resources\\Project 3', '2016-02'), 
('Y:\\Resources\\Project 2', '2014-01'), 
('Y:\\Resources\\Project 1', '2016-08')] 

Hinweis:dict Sie die Reihenfolge der Elemente nicht halten. Im Fall, dass Sie den Auftrag zu erhalten, verwenden Sie collections.OrderedDict()

1

Dies wird Ihre Liste filtern:

newList = filter(lambda x:x[1] > '2015-01', myList) # or whatever date you choose 

Ersetzen Sie Ihr eigenes Datum.

Beachten Sie auch, dass dies nur funktioniert, da Ihr Datum eine Zeichenfolge in einem gültigen ISO-Format ist. Sonst würde der String-Vergleich nicht funktionieren.

+0

Sorgfältige ... Sie sind Strings, so '>>> "2015-01"> "11000-01" true' – BorrajaX

+0

@ BorrajaX korrekt. Solange er sich an gültigen Daten in der Form "JJJJ-MM" hält, wird er aber OK sein. – Hoopdady

+0

Vergleichen mit etwas wie '(int (x [1] [: 4]), int (x [1] [5:]))> (2015, 1)' oder 'datetime.datetime.strptime (x [1] ,% Y-% m ') wird sicherer, ja. Wie auch immer, es ist eher Pythonic, ein Listenverständnis anstelle von Filter und Lambda zu verwenden: '[x für x in myList, wenn x [1]> '2015-1']' –

Verwandte Themen