Python Forum
removing dictionary element in list using (key, value)
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
removing dictionary element in list using (key, value)
#1
# list of dictionary
students = [{'id': '001', 'name': 'John'},
            {'id': '100', 'name': 'Park'},
            {'id': '010', 'name': 'Bjarne'}
           ]

# removing student who's name is Park in students list
def erase_student(key, val):
    for student in students:
        if student[key] == val:
            students.remove(student)

erase_student('name', 'Bjarne')



I want to replace for statement to code like this:
student = student in students if student[key] == value
students.remove(student)
But I can't make proper shorter code.
I'll be thankful if you give me advice.
Reply
#2
you should not change list while iterating over it, e.g.
# list of dictionary
students = [{'id': '001', 'name': 'John'},
            {'id': '100', 'name': 'Park'},
            {'id': '002', 'name': 'Bjarne'},
            {'id': '010', 'name': 'Bjarne'}
           ]
 
# removing student who's name is Bjarne in students list
def erase_student(key, val):
    for student in students:
        if student[key] == val:
            students.remove(student)

erase_student('name', 'Bjarne')
print(students)
Output:
[{'id': '001', 'name': 'John'}, {'id': '100', 'name': 'Park'}, {'id': '010', 'name': 'Bjarne'}]
you can do
# list of dictionary
students = [{'id': '001', 'name': 'John'},
            {'id': '100', 'name': 'Park'},
            {'id': '002', 'name': 'Bjarne'},
            {'id': '010', 'name': 'Bjarne'}
           ]
 
# removing student who's name is Bjarne in students list
def erase_student(mylist, key, val):
    return [item for item in mylist if item.get(key) != val]

students = erase_student(students, 'name', 'Bjarne')
print(students)
Output:
[{'id': '001', 'name': 'John'}, {'id': '100', 'name': 'Park'}]
note, it's better to pass the list as argument, rather than rely on global variable and list mutability
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#3
# list of dictionary
students = [{'id': '001', 'name': 'John'},
            {'id': '100', 'name': 'Park'},
            {'id': '002', 'name': 'Bjarne'},
            {'id': '010', 'name': 'Bjarne'}
            ]

(students.remove(student) for student in students[:] if student['name'] == 'Bjarne')
print(students)
or
students = [student for student in students if student['name'] != 'Bjarne']
Output:
[{'id': '001', 'name': 'John'}, {'id': '100', 'name': 'Park'}]
Reply
#4
I don't like that, because it just rely on side-effect inside list comprehension. It could be generator expression instead.
On line 8 list comprehension is just so that using list mutability to remove elements. I think OP is using remove only because they don't know better
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Sume Every 10 element in the list and Divided of Sum quest_ 7 148 Nov-27-2020, 10:58 AM
Last Post: perfringo
  Counting Element in Multidimensional List quest_ 1 96 Nov-25-2020, 10:00 PM
Last Post: quest_
  Adding List Element if Second part of the List Elements are the Same quest_ 3 129 Nov-25-2020, 04:33 PM
Last Post: bowlofred
  Removing element from list squall 6 188 Nov-22-2020, 09:34 PM
Last Post: jefsummers
  2d Array adds last element to entire list waiteup 2 105 Nov-19-2020, 08:25 PM
Last Post: bowlofred
  How to get index of minimum element between 3 & 8 in list Mekala 2 171 Nov-10-2020, 12:56 PM
Last Post: DeaD_EyE
  Creating a dictionary from a list Inkanus 5 313 Nov-06-2020, 06:11 PM
Last Post: DeaD_EyE
  Problem printing last element from a list tester_V 3 200 Oct-30-2020, 04:54 AM
Last Post: tester_V
  Dictionary list coja56 7 340 Sep-20-2020, 03:53 PM
Last Post: deanhystad
  How to make a list of values from a dictionary list? faryad13 2 253 Sep-03-2020, 03:45 PM
Last Post: faryad13

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020