2016-09-17 2 views
0

Ich message_id und message_writer_id zusammen in einer Python-Liste wie so beibehalten:Extrahieren eines Satzes aus einer Liste von Verbundelementen in Python

composite_items = ['1:2', '2:2', '3:2', '4:1', '5:19', '20:2', '45:1', ...] 

Wo jedes Element message_id:message_poster_id ist.

Aus der obigen Liste möchte ich die set von allen message_writer_ids extrahieren. I.e. Ich möchte ein set extrahieren alle eindeutigen Nummern nach: enthält, so dass ich am Ende mit:

item_set = ['2', '1', '19'] 

Was der effizienteste Weg ist zu tun, dass in Python?


Derzeit Ich denke, ich werde so etwas tun:

new_list = [] 
for item in composite_items: 
    element = item.split(":")[1] 
    new_list.append(element) 
new_set = set(new_list) 

mich gefragt, ob es ein schnellerer Weg, dies zu erreichen.

+4

Mehr Consise, kann etwas schneller sein. Übergeben wir das Generator-Verständnis an den Konstruktor von 'set':' set (o.split (':') [1] für o in composite_items) ' –

+0

Fair genug, es ist eine Verbesserung. Ich akzeptiere dies als eine Antwort, wenn Sie es als eins veröffentlichen. –

Antwort

2

können Sie Satz Verständnis verwenden wie so:

new_set = {item.partition(":")[2] for item in composite_items} 

Set Verständnis ist schnell, und im Gegensatz zu str.split(), str.partition() nur einmal spaltet und nicht mehr für mehr Doppelpunkte suchen. Ganz ähnlich wie mit str.split(maxsplit=1).

0
composite_items = ['1:2', '2:2', '3:2', '4:1', '5:19', '20:2', '45:1', ...] 
posters = dict() 
for element in composite_items: 
    poster_id = element.split(":")[1] 
    posters[poster_id] = posters.get(poster_id, 0) + 1 

Sie können Wörterbücher verwenden und auch zählen, wie viele Nachrichten von message_poster_id gesendet wurden. posters.get(poster_id,0) + 1 prüft, ob ein Poster existiert oder nicht. Wenn existiert es seinen Wert (Anzahl der Nachrichten) erhält und erhöht sie um 1

Wenn nicht seine existiert das poster_id in der Wörterbuch- und setzt es auf 0

Verwandte Themen