python - if else 使用 python 列表推导嵌套 for 循环

标签 python python-2.7 list-comprehension

谁能帮我想出产生以下输出的列表理解方式 -

令给定列表为 -

results = [
    {"id":  1, "name":  "input"},
    {"name": "status", "desc": "Status"},
    {"name": "entity", "fields": [
        {"id": 101, "name": "value"},
        {"id": 102, "name": "address"}]
    }
]

我正在寻找列表形式的输出。 获取输出的代码是:

output = []
for eachDict in results:
    if "fields" in eachDict:
        for field in eachDict["fields"]:
            output.append(eachDict["name"]+"."+field["name"])
    else:
        output.append(eachDict["name"])

因此使用上述代码的输出是 -

['input', 'status', 'entity.value', 'entity.address']

是否有可能在列表理解中使用 if else 嵌套 for 循环获得类似的输出?

在列表理解的 if 条件下,我无法尝试访问该内部 for 循环

我的尝试-

output = [eachDict["name"]+"."+field["name"] for field in eachDict["fields"] if "fields" in eachDict else eachDict["name"] for eachDict in results]

最佳答案

将您的代码转换为可工作代码的一种方法是使内部循环生成列表,然后将结果展平。

sum(([d['name'] + '.' + f['name'] for f in d['fields']] 
    if d.get('fields') else [d['name']] for d in results), [])

关于python - if else 使用 python 列表推导嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44953863/

相关文章:

python - 如何使用其他文件中的变量作为名称来调用函数

Python列表不会在循环中洗牌

python - 迭代大型列表(18,895 个元素)时 Double for 循环的更快方法

Python在JPEG图像上找到黑色方 block 的坐标

python - Autodoc FR (ADFR),在 MacOS BIG SUR 上安装

scheme - 在Scheme : bad idea?中实现 "Pythonic"映射

Python - 如何使用用户名和密码打开 Windows 共享

python - Django - 如何记录错误并显示消息

python - 如何将字符串插入字符串列表的每个标记?

python - 列表理解以查找列表中每个数字的所有倍数小于一个数字