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'}]