【问题标题】:How to access the individual values form a dictionary, if the values are in list of lists format?如果值采用列表格式,如何从字典中访问各个值?
【发布时间】:2021-08-23 08:40:34
【问题描述】:

我在 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] 等)运行测试用例函数。

【问题讨论】:

  • 您要测试所有 index-0 元素,然后是所有 index-1,... 还是使用任何索引组合?
  • 对我来说,你想做什么还不是很清楚? v[1] 实际上应该是什么?我认为您的代码实际上不需要 DqOpenPage 的东西,那是一个库吗?
  • @gimix 是的! : 测试所有 index-0 元素,然后是所有 index-1,...

标签: python json dictionary nested-lists


【解决方案1】:

您可以像这样访问此处的各个值,

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])

我不太明白您想要循环遍历哪些列表,但我希望这对您有所帮助。

【讨论】:

    【解决方案2】:

    解码 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}')
    

    您将获得 1 次针对 testno = 0 的测试(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”中将\\ 替换为/,以避免出现转义问题。

    【讨论】:

      猜你喜欢
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多