词典理解中的词典理解

时间:2018-05-24 21:57:41

标签: python python-2.7 dictionary

下面的输出来自REST API:

{
    "internalId": 14,
    "label": "L1",
    "requiredLevel": 10,
    "preferableLevel": 100,
    "conditions": [
        {
            "label": "A_WO_TYPE",
            "function": "in",
            "valueList": [
                "T1",
                "T2",
                "T3",
                "T4"
            ]
        },
        {
            "label": "A_SYS_AREA",
            "function": "in",
            "valueList": [
                "9999"
            ]
        }
    ]
},

我试图通过运行字典理解来清理它。我做得很好,直到我在条件声明中添加了第二个理解。

{item['label']: 
    {'requiredLevel': item['requiredLevel'], 
    'preferableLevel': item['preferableLevel'],
    'conditions': 
        {'label': LABEL_REPLACEMENT[condition['label']],
        'function': condition['function'],
        'valueList': condition['valueList']
        for condition in item['conditions']}}
for item in tempItems}

我得到的错误是:

for condition in item['conditions']}
  ^
SyntaxError: invalid syntax

当条件只是项目['条件']时运行正常但是我想在飞行中替换标签的值,我想我试图变得太聪明或者我失踪了明显的东西。我知道如果条件没有可能包含多个项目,我就不需要第二次理解。

任何帮助都会非常感激,因为我在这个问题上遇到了障碍。

编辑:添加错误消息

2 个答案:

答案 0 :(得分:0)

看看你内心的理解(x,y,z为了简洁):

encode('utf-8')

你尝试在一个理解中集中多个键/值对,这是没有意义的。我想你想写:

{'label': x, 'function': y, 'valueList': z for condition in item['conditions']}

答案 1 :(得分:0)

我发誓,我在这里看到一条评论,询问我在问这个问题时发布的预期输出,但我不再在这里看到了。写输出让我意识到我在考虑条件错误的项目。我将它包装在一个列表中,现在我有一个字典列表,它可以工作。

{item['label']: 
    {'requiredLevel': item['requiredLevel'], 
    'preferableLevel': item['preferableLevel'],
    'conditions': 
        [{'label': LABEL_REPLACEMENT[condition['label']],
        'function': condition['function'],
        'valueList': condition.get('valueList',condition.get('value',None))}
        for condition in item['conditions']]}
for item in tempItems}