- largest_ext = None
- largest_count = 0
- for e, t in things_by_ext.iteritems():
- count = len(t)
- if count>largest_count:
- largest_ext = e
- largest_count = count
+ extensions = []
+ missing = set(things)
+ while missing and things_by_ext:
+ largest_ext = None
+ largest_count = 0
+ for e, t in things_by_ext.iteritems():
+ count = len(t)
+ if count>largest_count:
+ largest_ext = e
+ largest_count = count
+ elif count==largest_count and e.preference>largest_ext.preference:
+ largest_ext = e
+
+ extensions.append(largest_ext)
+ for t in things_by_ext[largest_ext]:
+ missing.remove(t)
+ if not missing:
+ break
+
+ del things_by_ext[largest_ext]
+ for e in things_by_ext.keys():
+ unseen = filter((lambda t: t in missing), things_by_ext[e])
+ if unseen:
+ things_by_ext[e] = unseen
+ else:
+ del things_by_ext[e]
+
+ if missing:
+ return None