-1
abc = [123,345,678]
var = [{'name':'123, 'age':12},{name:345, 'age':32},{name:789,'age':39}]

I want to delete a the dictionary from var if the var['name'] doesn't exist in list abc.

final = [{'name':'123, 'age':12},{name:345, 'age':32}]

I tried the following

for i,element in enumerate(abc):
   if element['name'] in var.keys():
      element['salary'] = '50000'
   else:
       abc.pop(i)

it deletes some dicts, but leaves one dict

Vamsi Nimmala
  • 497
  • 1
  • 7
  • 19
  • 1
    How have you tried to solve this? Please show us your attempt and explain how exactly it doesn't work – ForceBru Dec 13 '18 at 18:43

3 Answers3

3

Here is a list comprehension method:

final = [v for v in var if v['name'] in abc]
Gerges
  • 6,269
  • 2
  • 22
  • 44
3
final = filter(lambda x: x['name'] in abc, var)
Sergey Pugach
  • 5,561
  • 1
  • 16
  • 31
1

Recommend using sets refer Complexity of *in* operator in Python

set_abc = set(abc)
final = [x for x in var if x['name'] in set_abc]
mad_
  • 8,121
  • 2
  • 25
  • 40
  • You're instantiating a new set for every iteration so it does not help the time complexity at all. You should instantiate the set before using it in the list comprehension. – blhsing Dec 13 '18 at 18:58
  • 1
    @blhsing makes sense. corrected – mad_ Dec 13 '18 at 19:00