从列表中删除字典

时间:2021-06-30 09:39:52

标签: python python-3.x list dictionary remove

我有以下列表:

b = [{'codename': 'add_group', 'id': 5, 'content_type': 2, 'name': 'Can add group'},
 {'codename': 'change_group', 'id': 6, 'content_type': 2, 'name': 'Can change group'},
 {'codename': 'delete_group', 'id': 7, 'content_type': 2, 'name': 'Can delete group'}, 
 {'codename': 'view_group', 'id': 8, 'content_type': 2, 'name': 'Can view group'}, 
 {'codename': 'add_templateresource', 'id': 21, 'content_type': 6, 'name': 'Can add template resource'},
 {'codename': 'change_templateresource', 'id': 22, 'content_type': 6, 'name': 'Can change template resource'},
 {'codename': 'delete_templateresource', 'id': 23, 'content_type': 6, 'name': 'Can delete template resource'}, 
 {'codename': 'view_templateresource', 'id': 24, 'content_type': 6, 'name': 'Can view template resource'}, 
 {'codename': 'add_usermodel', 'id': 13, 'content_type': 4, 'name': 'Can add user'},
 {'codename': 'change_usermodel', 'id': 14, 'content_type': 4, 'name': 'Can change user'}, 
 {'codename': 'delete_usermodel', 'id': 15, 'content_type': 4, 'name': 'Can delete user'}, 
 {'codename': 'view_usermodel', 'id': 16, 'content_type': 4, 'name': 'Can view user'}]

现在我想删除codename

中值包含_templateresource子串的字典

4 个答案:

答案 0 :(得分:3)

我认为最简单的方法是使用列表推导过滤掉这些条目:

result = [i for i in b if not i['codename'].endswith('_templateresource')]

答案 1 :(得分:2)

您可以遍历列表的副本并删除匹配的字典

var isDeactivated = false;
var eventOrganizer;
var isCheckIn = false;

             function validateEvent(result) {
                $.post(
                    "**displayEventAPI**", 
                    { 
                        id: eventID,
                    }).done(function (data) {
                        result(
                            data["eventList"][0]["event_status"], 
                            data["eventList"][0]["event_creator"]
                        );
                    }
                )
            }

            validateEvent(function(event_status, event_creator) {
                if (event_status == 0) {
                    isDeactivated = true;
                }

                eventOrganizer = event_creator;

                console.log(isDeactivated, '--isDeactivated');
                console.log(eventOrganizer, '--eventOrganizer');
            });

            function validateCheckIn(result) {
                $.post(
                    "**displayAttendanceAPI", 
                    { 
                        event_id: eventID,
                    }).done(function (data) {
                        for (var i = 0; i < data.attendanceList.length; i++) {
                            if (data.attendanceList[i].badge_id === badgeID) {
                                isCheckIn = true;
                            }
                        }
                        result(
                            isCheckIn
                        );
                    }
                )
            }

            validateCheckIn(function(isCheckIn) {
                console.log(isCheckIn, '--isCheckIn');
            });

答案 2 :(得分:1)

像下面这样的理解可以理解。

d = [ n for n in b if not '_templateresource' in n['codename']]

答案 3 :(得分:1)

此外,您可以将内置过滤器功能与 lambda 一起使用

list(filter(lambda x: not x['codename'].endswith("_templateresource"), b))

如果您需要扩展代码,您可以轻松完成,例如

def is_bad(element, bad_suffixes):
    for suffix in bad_suffixes:
        if element.endswith(suffix):
            return True
    return False

bad_suffixes = ['_templateresource','_group']

list(filter(lambda x: not is_bad(x['codename'], bad_suffixes), b))