从字典列表中访问字典值

Accessing dictionary value from list of dictionaries

我使用的关键字 returns 字典列表如下所示。如果我遍历字典,我可以获得值。例如,

${vPools} =      list all vpools
: FOR    ${Item}    IN    @{vPools}
\    ${vPoolID} =     ${Item["VPoolID"]}

有没有办法不用循环直接访问一个值?像

${vPoolID} =   @{vPools[0]}["VPoolID"]

对于第一个列表项?我一直在尝试不同的东西,但似乎找不到合适的食谱。

17:23:30.815    INFO    [
    {
        "GroupType": 3, 
        "GroupTypeEnum": 3, 
        "Name": "GS - Flash - Protection: 1 - QoS: Gold", 
        "OptimizationSetting": 0, 
        "OptimizationSettingEnum": 0, 
        "PhysicalPoolID": "7efaf334-b723-4be6-af56-3a626562b553", 
        "ProtectionSetting": 1, 
        "QoSClassPriorityID": 1, 
        "Secured": false, 
        "TotalCapacity": 0, 
        "UsedCapacity": 0, 
        "VPoolID": "be7d518e-9851-4ad5-bd59-c7987fc3dd9b"
    }, 
    {
        "GroupType": 3, 
        "GroupTypeEnum": 3, 
        "Name": "GS - Flash - Protection: 1 - QoS: Silver", 
        "OptimizationSetting": 0, 
        "OptimizationSettingEnum": 0, 
        "PhysicalPoolID": "7efaf334-b723-4be6-af56-3a626562b553", 
        "ProtectionSetting": 1, 
        "QoSClassPriorityID": 2, 
        "Secured": false, 
        "TotalCapacity": 0, 
        "UsedCapacity": 0, 
        "VPoolID": "1a82e650-589e-4077-878b-48eea7211278"
    }, 
    {
        "GroupType": 3, 
        "GroupTypeEnum": 3, 
        "Name": "GS - Flash - Protection: 1 - QoS: Bronze", 
        "OptimizationSetting": 0, 
        "OptimizationSettingEnum": 0, 
        "PhysicalPoolID": "7efaf334-b723-4be6-af56-3a626562b553", 
        "ProtectionSetting": 1, 
        "QoSClassPriorityID": 3, 
        "Secured": false, 
        "TotalCapacity": 0, 
        "UsedCapacity": 0, 
        "VPoolID": "5a082095-cbb5-460a-a0fc-0a8dc90d007d"
    }
]()

集合库具有关键字“从词典中获取”。我想这就是您要找的:

*** Settings ***
Library    Collections

*** Test Cases ***
Dictionary
    ${dict1}=      Create Dictionary     GroupType=3    VPoolID=be7d518e-9851-4ad5-bd59-c7987fc3dd9b
    ${dict2}=      Create Dictionary     GroupType=3    VPoolID=1a82e650-589e-4077-878b-48eea7211278
    ${vPools}=     Create List           ${dict1}       ${dict2}
    ${vPoolID}=    Get From Dictionary   @{vPools}[0]   VPoolID

是的,如果您使用 extended variable syntax,您可以访问嵌套集合。这在使用 DatabaseLibrary 和 SudsLibrary 时非常方便。确保将键和索引放在花括号内,并将键放在引号中。

List of Dictionaries
    ${a}    Create Dictionary    a=1    b=2
    ${b}    Create Dictionary    x=5    y=7
    ${stuff}    Create List    ${a}    ${b}
    ${item}    Set Variable    ${stuff[0]['b']}
    Should Be Equal    ${stuff[1]['x']}    5

所以尝试:

${vPoolID}    Set Variable    ${vPools[0]["VPoolID"]}

由于您引用的是单个项目,因此请不要使用 @,而应使用 $。

您的右花括号需要在第二组方括号之外。

${vPoolID} =   ${vPools[0]["VPoolID"]}