我有一个字典列表,需要按字符串列表过滤它们。
现在我有这个:
function countdown(duration) {
const start = Date.now();
const interval = window.setInterval(function() {
const remaining = duration - (Date.now() - start);
if (remaining <= 0) {
console.log(0);
window.clearInterval(interval);
return;
}
console.log(remaining);
}, 500);
}
countdown(5000);
我需要的结果是:
projects = [{u'CustomerName': u'abc', u'Projectname': u'Contract A full'},
{u'CustomerName': u'bcd', u'Projectname': u'Contract A medium'},
{u'CustomerName': u'cde', u'Projectname': u'Contract B full'},
{u'CustomerName': u'def', u'Projectname': u'Contract B medium'}]
filter = ['B', 'full']
return [p for p in projects if p['ProjectName'] in filter]
然而它什么也没有回报。只有我指定整个字符串:
[{u'CustomerName': u'abc', u'Projectname': u'Contract A full'},
{u'CustomerName': u'cde', u'Projectname': u'Contract B medium'},
{u'CustomerName': u'cde', u'Projectname': u'Contract B full'}]
感谢您的帮助。
答案 0 :(得分:3)
这是一种方法,假设您正在寻找包含&#39; full&#39;的项目名称:
[p for p in projects if 'full' in p['ProjectName']]
或者如果您需要包含&#39; B&#39;或者&#39;完整&#39;:
[p for p in projects if any(i in p['ProjectName'] for i in ('B', 'full'))]
答案 1 :(得分:1)
明确的答案是非常优雅的出路,特别是对于“任何”部分。
以下是使用正则表达式的另一种方法:
import re
[p for p in projects if re.match(".*(B|full).*",p["Projectname"])]
“。*”基本上意味着任何事件发生,这个正则表达式意味着你正在寻找“B”或“完整”的出现,前面和后面有任何东西。
虽然你可能会遇到一些与意外事物相匹配的情况,例如“合约更充分的媒介”或其他一些事情,但正则表达式确实适用于你所呈现的简单案例而不会有太多麻烦。