2016-11-10 6 views
1

Ich muss ein Tupel basierend auf einem Wert aus einem verschachtelten Wörterbuch wie unten beschrieben trennen und in eine andere Liste einfügen. Ich möchte trennen Tupel mit Werten 'bb'Separates Tupel von einer verschachtelten Liste in eine separate Liste

original_list= [[('aa','1'),('bb','2')],[('cc','3'),('bb','4')],[('dd','5'),('dd','6')]] 

I wie unten zwei Listen benötigen,

final_list= [[('aa','1')],[('cc','3')],[('dd','5'),('dd','6')]] 
deleted_list = [[('bb','2')],[('bb','4')]] 

ich den folgenden rekursiven Code verwendet,

def remove_items(lst, item): 
    r = [] 
    for i in lst: 
     if isinstance(i, list): 
      r.append(remove_items(i, item)) 
     elif item not in i: 
      r.append(i) 
    return r 

Es könnte das Ergebnis produzieren Liste nach dem Löschen des Wertes. Gibt es eine Möglichkeit, eine andere Liste mit den gelöschten Werten zu erhalten?

Antwort

1
>>> def remove_items(lst, item): 
...  r = [] 
...  d = [] 
...  for i in lst: 
...   if isinstance(i, list): 
...    r_tmp,d_tmp = remove_items(i, item) 
...    if r_tmp: 
...     r.append(r_tmp) 
...    if d_tmp: 
...     d.append(d_tmp) 
...   else: 
...     if item not in i: 
...      r.append(i) 
...     else: 
...      d.append(i) 
...  return r,d 
... 
>>> original_list= [[('aa','1'),('bb','2')],[('cc','3'),('bb','4')],[('dd','5'),('dd','6')]] 
>>> result = remove_items(original_list,'bb') 
>>> result[0] 
[[('aa', '1')], [('cc', '3')], [('dd', '5'), ('dd', '6')]] 
>>> result[1] 
[[('bb', '2')], [('bb', '4')]] 
>>> 
Verwandte Themen