如果值采用列表列表格式,如何访问字典中的各个值?
How to access the individual values form a dictionary, if the values are in list of lists format?
我已经在 json 中为我的测试功能编写了一个配置文件。配置文件如下所示:
{
"Chrome_executable_path": "C:\Users\AIGHOSH\PycharmProjects\chromedriver.exe",
"File_locations": [["C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupAge8277.csv"],
["C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupAge8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupArea8277.csv"],
["C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupAge8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupArea8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupEthnic8277.csv"],
["C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupAge8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupArea8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupEthnic8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupSex8277.csv"],
["C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupAge8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupArea8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupEthnic8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupSex8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupYear8277.csv"]
],
"Null_values": [["_"], ["@"], ["<>"], ["-"], ["#"]],
"Operation": [["None"], ["Append"], ["Merge"], ["Append then Merge"]],
"weights": [
{
"completeness": "0.2",
"timeliness": "0.2",
"uniqueness": "0.2",
"validity": "0.2",
"integrity": "0.2"
},
{
"completeness": "0.1",
"timeliness": "0.3",
"uniqueness": "0.2",
"validity": "0.2",
"integrity": "0.2"
},
{
"completeness": "0.2",
"timeliness": "0.2",
"uniqueness": "0.3",
"validity": "0.1",
"integrity": "0.2"
},
{
"completeness": "0.2",
"timeliness": "0.2",
"uniqueness": "0.1",
"validity": "0.4",
"integrity": "0.1"
},
{
"completeness": "0.1",
"timeliness": "0.1",
"uniqueness": "0.4",
"validity": "0.2",
"integrity": "0.2"
}
]
}
现在我希望 value[0] 成为我的第一个测试用例参数,然后 v[1] 成为我的第二个测试用例参数。
我的测试用例函数:
#for the fist element of the values(eg: v[0])
def test_case(self):
self.dqopenPage = DqOpenPage(self.driver)
self.dqopenPage.drop(filess = config["File_locations"]) #should take the first list with only 1 file
self.dqopenPage.df_operation(operation=config["Operations"]) #should take the "None"
self.dqopenPage.define_null_value(null = config["Null_values"])#should take "_"
那么如何使用 for 循环和 运行 测试用例函数获取所有对应值(如 v[1]、v[2] 等)的值
您可以像这样访问这里的各个值,
print(config["File_locations"][0][0])
print(config["Null_values"][0][0])
print(config["Operation"][0][0])
如果你想通过循环访问单个值,你可以这样做
这是遍历文件位置的方法。
for file in config["File_locations"]:
for index in range(len(file)):
print(file[index])
这是循环 Null 值或操作的方法,
for value in config["Null_values"]:
print(value[0])
我不是很明白你想遍历哪些列表,但我希望这对你有帮助。
解码json
#cfg = (your config file)
jcfg=json.loads(cfg)
测试所有 index-0 参数,然后所有 index-1,...
for testno in range(5):
print(f'\t\t\tindex {testno}')
for floc in jcfg['File_locations'][testno]:
nv = jcfg['Null_values'][testno]
op = jcfg['Operation'][testno]
w = jcfg["weights"][testno]
print(f'testing for {floc}, {nullv}, {op}, {w}')
你得到了 testno = 0
的 1 次测试(floc
,nv = "_"
和 op = None
),然后是 testno = 1
的 2 次测试,依此类推
使用每个参数排列进行测试
#jcfg['File_locations'] = (just one list with all your files)
for i_floc, i_nv, i_op, i_w in itertools.permutations(range(5), 4):
floc = jcfg['File_locations'][i_floc]
nv = jcfg['Null_values'][i_nv]
op = jcfg['Operation'][i_op]
w = jcfg['weights'][i_w]
print(f'testing for {floc}, {nullv}, {op}, {w}')
你获得了全部 5 个!参数的可能排列
注意:为了测试这一点,我在您的“File_locations”中将 \
替换为 /
以避免转义问题。
我已经在 json 中为我的测试功能编写了一个配置文件。配置文件如下所示:
{
"Chrome_executable_path": "C:\Users\AIGHOSH\PycharmProjects\chromedriver.exe",
"File_locations": [["C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupAge8277.csv"],
["C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupAge8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupArea8277.csv"],
["C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupAge8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupArea8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupEthnic8277.csv"],
["C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupAge8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupArea8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupEthnic8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupSex8277.csv"],
["C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupAge8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupArea8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupEthnic8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupSex8277.csv", "C:\Users\AIGHOSH\Desktop\DQ_DATA\DimenLookupYear8277.csv"]
],
"Null_values": [["_"], ["@"], ["<>"], ["-"], ["#"]],
"Operation": [["None"], ["Append"], ["Merge"], ["Append then Merge"]],
"weights": [
{
"completeness": "0.2",
"timeliness": "0.2",
"uniqueness": "0.2",
"validity": "0.2",
"integrity": "0.2"
},
{
"completeness": "0.1",
"timeliness": "0.3",
"uniqueness": "0.2",
"validity": "0.2",
"integrity": "0.2"
},
{
"completeness": "0.2",
"timeliness": "0.2",
"uniqueness": "0.3",
"validity": "0.1",
"integrity": "0.2"
},
{
"completeness": "0.2",
"timeliness": "0.2",
"uniqueness": "0.1",
"validity": "0.4",
"integrity": "0.1"
},
{
"completeness": "0.1",
"timeliness": "0.1",
"uniqueness": "0.4",
"validity": "0.2",
"integrity": "0.2"
}
]
}
现在我希望 value[0] 成为我的第一个测试用例参数,然后 v[1] 成为我的第二个测试用例参数。
我的测试用例函数:
#for the fist element of the values(eg: v[0])
def test_case(self):
self.dqopenPage = DqOpenPage(self.driver)
self.dqopenPage.drop(filess = config["File_locations"]) #should take the first list with only 1 file
self.dqopenPage.df_operation(operation=config["Operations"]) #should take the "None"
self.dqopenPage.define_null_value(null = config["Null_values"])#should take "_"
那么如何使用 for 循环和 运行 测试用例函数获取所有对应值(如 v[1]、v[2] 等)的值
您可以像这样访问这里的各个值,
print(config["File_locations"][0][0])
print(config["Null_values"][0][0])
print(config["Operation"][0][0])
如果你想通过循环访问单个值,你可以这样做
这是遍历文件位置的方法。
for file in config["File_locations"]:
for index in range(len(file)):
print(file[index])
这是循环 Null 值或操作的方法,
for value in config["Null_values"]:
print(value[0])
我不是很明白你想遍历哪些列表,但我希望这对你有帮助。
解码json
#cfg = (your config file)
jcfg=json.loads(cfg)
测试所有 index-0 参数,然后所有 index-1,...
for testno in range(5):
print(f'\t\t\tindex {testno}')
for floc in jcfg['File_locations'][testno]:
nv = jcfg['Null_values'][testno]
op = jcfg['Operation'][testno]
w = jcfg["weights"][testno]
print(f'testing for {floc}, {nullv}, {op}, {w}')
你得到了 testno = 0
的 1 次测试(floc
,nv = "_"
和 op = None
),然后是 testno = 1
的 2 次测试,依此类推
使用每个参数排列进行测试
#jcfg['File_locations'] = (just one list with all your files)
for i_floc, i_nv, i_op, i_w in itertools.permutations(range(5), 4):
floc = jcfg['File_locations'][i_floc]
nv = jcfg['Null_values'][i_nv]
op = jcfg['Operation'][i_op]
w = jcfg['weights'][i_w]
print(f'testing for {floc}, {nullv}, {op}, {w}')
你获得了全部 5 个!参数的可能排列
注意:为了测试这一点,我在您的“File_locations”中将 \
替换为 /
以避免转义问题。