Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
泰斯特Test
Taisite-Platform
提交
22ff2dcf
T
Taisite-Platform
项目概览
泰斯特Test
/
Taisite-Platform
8 个月 前同步成功
通知
121
Star
28
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Taisite-Platform
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
22ff2dcf
编写于
9月 26, 2019
作者:
泰斯特Test
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[feat](common)新增「查找列表中满足特定条件的字典的值」的变量定位方式
上级
0cfa4702
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
28 addition
and
2 deletion
+28
-2
backend/utils/common.py
backend/utils/common.py
+28
-2
未找到文件。
backend/utils/common.py
浏览文件 @
22ff2dcf
...
...
@@ -234,13 +234,33 @@ def dict_get(dic, locators, default=None):
except
KeyError
:
return
default
continue
if
isinstance
(
value
,
list
):
if
isinstance
(
value
,
list
)
and
len
(
value
)
>
0
:
if
can_convert_to_int
(
locator
):
try
:
value
=
value
[
int
(
locator
)]
except
IndexError
:
return
default
continue
elif
is_specific_search_by_dict_value
(
locator
)
and
all
([
isinstance
(
v
,
dict
)
for
v
in
value
]):
first_equal_index
=
locator
.
index
(
'='
)
last_dot_index
=
locator
.
rindex
(
'.'
)
matched_key_re
=
locator
[:
first_equal_index
]
# 字典中存在满足的正则条件的键
matched_value_re
=
locator
[
first_equal_index
+
1
:
last_dot_index
]
# matched_key对应的值需要满足的正则条件
needed_value_key
=
locator
[
last_dot_index
+
1
:]
# 满足正则条件的字典中待取的值的键
for
dic
in
value
:
for
k
,
v
in
dic
.
items
():
if
re
.
match
(
matched_key_re
,
str
(
k
))
and
re
.
match
(
matched_value_re
,
str
(
v
)):
needed_value
=
dic
.
get
(
needed_value_key
)
value
=
needed_value
break
else
:
continue
break
else
:
return
default
continue
elif
locator
==
'random'
:
try
:
value
=
value
[
random
.
randint
(
0
,
len
(
value
)
-
1
)]
...
...
@@ -251,6 +271,13 @@ def dict_get(dic, locators, default=None):
return
value
def
is_specific_search_by_dict_value
(
expression
):
if
re
.
match
(
r
'(.)+=(.)+\.(.)+'
,
expression
):
return
True
else
:
return
False
def
is_slice_expression
(
expression
):
if
re
.
match
(
'(-?\d+)?:(-?\d+)?'
,
expression
):
return
True
...
...
@@ -541,4 +568,3 @@ def get_random_key(digit_num=16):
if
__name__
==
'__main__'
:
pass
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录