ich eine sortierte Liste haben basierend auf dem Wert für die Schlüssel name
wie folgt:generieren Liste der Wörterbücher, ohne benachbarte Wörterbuch Schlüssel/Wert gleich
s = [{'name': 'Bart', 'age': 12}, {'name': 'Bart', 'age': 19}, {'name': 'Bart', 'age': 1},{'name': 'Homer', 'age': 30}, {'name': 'Homer', 'age': 12},{'name': 'Simpson', 'age': 19}]
Ich möchte die Elemente der Liste, so dass Wörterbücher mit der arrangieren gleicher Wert für Schlüssel name
nicht treten nacheinander auf.
Erforderliche Ausgabe:
[{'name': 'Bart', 'age': 12}, {'name': 'Homer', 'age': 30}, {'name': 'Simpson', 'age': 19}, {'name': 'Bart', 'age': 19}, {'name': 'Homer', 'age': 12}, {'name': 'Bart', 'age': 1}]
ODER
[{'name': 'Bart', 'age': 12}, {'name': 'Homer', 'age': 30}, {'name': 'Bart', 'age': 19}, {'name': 'Homer', 'age': 12}, {'name': 'Bart', 'age': 1},{'name': 'Simpson', 'age': 19}]
Um eine der benötigten Ausgänge habe ich versucht, map
und lambda
mit Die Idee war, jedes name
Element mit dem nächsten vergleichen Elemente name
und wenn sie nicht übereinstimmen, tauschen Sie die Werte und die resultierende Liste zurück.
Unten ist der Code, den ich versuchte:
map(lambda x: x if x['name']!=next(iter(x))['name'] else None, s)
Eine Sache, die nicht ist nicht funktioniert, dass next(iter(x)
nicht das nächste Element zurückgekommen. Ich möchte auch wissen, warum und wenn die Lösung mit map
und lambda
erreicht werden kann?
Dies ist nicht gut gestellt. Zum Beispiel, wenn Sie 3 Homers und 1 Bart haben, ist das nicht möglich. –
Was ist, wenn es sich nicht um eine sortierte Liste handelt? Dann wäre die ideale Lösung homer, Bart, Homer, Homer. Ich möchte sie nur so weit wie möglich trennen. Fälle, in denen es nicht vermieden werden kann, ist in Ordnung. – Vaulstein
Verwandte, wenn nicht genaue Duplikat: http://Stackoverflow.com/q/25285792/1639625 –