-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
  • 457
  • 1
  • 6
  • 17
  • 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
  • 5,869
  • 2
  • 20
  • 37
3
final = filter(lambda x: x['name'] in abc, var)
Sergey Pugach
  • 5,186
  • 1
  • 15
  • 29
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_
  • 7,844
  • 2
  • 22
  • 37
  • 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