@rads: Du könntest auch einfach eine Funktion schreiben die dafür sorgt, dass für Elemente die nicht in dem Dictionary vorkommen, grundsätzlich ein höherer Wert zurückgegeben wird, als bei denen die Werte im Dictionary haben. Beispiel:
Code: Alles auswählen
dic_full = {'field4': 40, 'field2': 20, 'field1': 30, 'field3': 10}
parts = ['field2', 'field4', 'field3', 'field5']
def key_func(item):
try:
return (0, dic_full[item])
except KeyError:
return (1, None)
parts.sort(key=key_func)
print parts
Ansonsten solltest Du `list.remove()` so nicht in einer Schleife verwenden. Das wäre nicht nur ineffizient, sondern funktioniert auch nicht richtig. Wenn Du Elemente aus einer Liste entfernst, über die Du gerade iterierst, dann rutschen ja alle Folge-Elemente einen Platz nach vorne. Davon bekommt aber die Schleife nichts mit und es werden Elemente ungeprüft übersprungen.