根据Value - Python中的条件从JSON中删除字典



JSON如下

dict =[
{'name':'Test01-Serial01'
},
{'name':'Tests04-Serial04'
}
]

首先,我想用-分隔名称,然后用索引0(即Test01)分隔名称我想删除不符合name规则的字典规则:4位2数字数字

这里Tests04不跟随4位Word2数字数字规则,且包含5位单词

您也可以使用正则表达式来解析这些值:

import re
mylist = [
{'name': 'Test01' },
{'name': 'Tests04' }
]
regex = re.compile(r'^w{4}d{2}$')
mylist = [{k:v} for _ in mylist for k,v in _.items() if regex.match(v)]
# Or, maybe this is more clear?
# mylist = [item for item in mylist if regex.match(list(item.values())[0])]
print(mylist)

这回报:

[{'name': 'Test01'}]

这表示查找四个"word"字符,然后在每个对象的值的开始和结束之间的两个数字。任何不符合这个模式的东西都会被过滤掉。查看w的定义,以确保您和re的作者对单词字符的定义是一致的。

并且,正如@cobra指出的那样,使用dict作为变量名(特别是对于列表)不是最佳实践。

编写一个函数,根据您的规则验证该值。使用列表推导式重建原始列表。

from string import ascii_letters, digits

def isvalid(s):
return len(s) == 6 and all(c in ascii_letters for c in s[:4]) and all(c in digits for c in s[4:])

_list = [
{'name': 'Test01-Serial01'},
{'name': 'Tests04-Serial04'}
]
_list = [e for e in _list if isvalid(e['name'].split('-')[0])]
print(_list)

输出:

[{'name': 'Test01-Serial01'}]

相关内容

  • 没有找到相关文章

最新更新