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
  extract an element of a list into a string alexs 5 989 Aug-30-2024, 09:24 PM
Last Post: alexs
  Sort a list of dictionaries by the only dictionary key Calab 2 1,159 Apr-29-2024, 04:38 PM
Last Post: Calab
  element in list detection problem jacksfrustration 5 1,284 Apr-11-2024, 05:44 PM
Last Post: deanhystad
  Dictionary in a list bashage 2 1,022 Dec-27-2023, 04:04 PM
Last Post: deanhystad
  filtering a list of dictionary as per given criteria jss 5 1,333 Dec-23-2023, 08:47 AM
Last Post: Gribouillis
  list in dicitonary element problem jacksfrustration 3 1,259 Oct-14-2023, 03:37 PM
Last Post: deanhystad
  How to add list to dictionary? Kull_Khan 3 1,537 Apr-04-2023, 08:35 AM
Last Post: ClaytonMorrison
  Find (each) element from a list in a file tester_V 3 1,785 Nov-15-2022, 08:40 PM
Last Post: tester_V
  Сheck if an element from a list is in another list that contains a namedtuple elnk 8 2,787 Oct-26-2022, 04:03 PM
Last Post: deanhystad
  Membership test for an element in a list that is a dict value for a particular key? Mark17 2 1,657 Jul-01-2022, 10:52 PM
Last Post: Pedroski55

Forum Jump:

User Panel Messages

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