我有以下列表:
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子串的字典答案 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))