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
  Convert each element of a list to a string for processing tester_V 6 308 Jun-16-2021, 02:11 AM
Last Post: tester_V
  Python dictionary with values as list to CSV Sritej26 4 470 Mar-27-2021, 05:53 PM
Last Post: Sritej26
  convert List with dictionaries to a single dictionary iamaghost 3 516 Jan-22-2021, 03:56 PM
Last Post: iamaghost
Sad Convert python list to dictionary akanowhere 6 665 Dec-27-2020, 09:26 PM
Last Post: Pedroski55
  Sume Every 10 element in the list and Divided of Sum quest_ 7 577 Nov-27-2020, 10:58 AM
Last Post: perfringo
  Counting Element in Multidimensional List quest_ 1 386 Nov-25-2020, 10:00 PM
Last Post: quest_
  Adding List Element if Second part of the List Elements are the Same quest_ 3 525 Nov-25-2020, 04:33 PM
Last Post: bowlofred
  Removing element from list squall 6 665 Nov-22-2020, 09:34 PM
Last Post: jefsummers
  2d Array adds last element to entire list waiteup 2 407 Nov-19-2020, 08:25 PM
Last Post: bowlofred
  How to get index of minimum element between 3 & 8 in list Mekala 2 712 Nov-10-2020, 12:56 PM
Last Post: DeaD_EyE

Forum Jump:

User Panel Messages

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