Python 从嵌套字典创建列表

Python 从嵌套字典创建列表,python,list,dictionary,Python,List,Dictionary,我想创建一个由字典键组成的列表,但这些字典嵌套在一个列表中。例如,给定以下JSON: { "test_cases": [{ "name": "first request", "request": { "url": "{{env_base_url}}/v2/597649d3110000be08b1be84/{{env_userName}}" }, "variabl

我想创建一个由字典键组成的列表,但这些字典嵌套在一个列表中。例如,给定以下JSON:

{
    "test_cases": [{
            "name": "first request",
            "request": {
                "url": "{{env_base_url}}/v2/597649d3110000be08b1be84/{{env_userName}}"
            },
            "variables": {
                "var1": "some stuff",
                "var2": "some other stuff"
            }
        },
        {
            "name": "second request",
            "request": {
                "url": "{{env_base_url}}/v2/597649d3110000be08b1be84/{{env_userName}}"
            },
            "variables": {
                "var3": "some new stuff",
                "var4": "some other new stuff"
            }
        }
    ]
}
我想从每个测试用例的变量中创建所有键的列表-示例输出为:

list = ['var1', 'var2', 'var3', 'var4]
我有代码来实现这一点,但它似乎不必要的复杂

test_var_names = [list(test['variables'].keys()) for test in data['test_cases']]
i =0
while i < len(test_var_names):
    test_var_name = test_var_names[i]
    if isinstance(test_var_name, list):
        for item in test_var_name:
            test_var_names.append(item)
        test_var_names.remove(test_var_name)
        i = i-1
    i += 1
print (test_var_names)
test_var_names=[list(test['variables'].keys())用于数据中的测试['test_cases']]
i=0
而i
您可以使用如下列表:

请注意,每个内部dict的键顺序不保证,因为dict在中没有顺序。您可以使用如下列表:


请注意,每个内部dict的键顺序不保证,因为dict在中没有顺序。此列表理解对于格式错误的数据更为宽容(例如,它将忽略不包含
变量的数据)

尽管上面的代码效率很高,但可读性更高:

variables = []
items = d.get('test_cases')
for item in items:
    variables.extend(item.get('variables', {}).keys())

此列表理解更容易理解格式错误的数据(例如,它会忽略不包含
变量的数据

尽管上面的代码效率很高,但可读性更高:

variables = []
items = d.get('test_cases')
for item in items:
    variables.extend(item.get('variables', {}).keys())

while循环的功能是什么?似乎第一行应该完成这项工作while循环的功能是什么?看起来第一行应该可以完成这项工作谢谢,这非常适合JSON的灵活性。谢谢,这非常适合JSON的灵活性。
variables = []
items = d.get('test_cases')
for item in items:
    variables.extend(item.get('variables', {}).keys())