根据提供的键值调整嵌套字典

时间:2016-09-26 14:07:30

标签: python dictionary conditional

我想根据params给出的各种参数创建以下字典。现在我不想添加没有任何价值的键。因此,例如,如果params['ean']为空或不存在,我想排除整行"EAN": params['ean']。任何建议都非常受欢迎。

myitem = {
"Item": {
     "Title": params['title'],
     "Description": "Some Text",
     "PrimaryCategory": {"CategoryID": params['category_id']},
     "ISBN": params['isbn'],
     "EAN": params['ean']
}
}

请注意,这些参数不会像myitem一样具有相同的密钥。

3 个答案:

答案 0 :(得分:1)

我认为我不完全理解这个问题,但是这样的事情怎么样:

myitem = {}
myitem['Item'] = {"Description": "Some Text"}
for keys in ['title', 'category_id', 'isbn', 'ean']:
    if params[keys]:
        myitem['Item'].append({keys.upper(): params[keys]})

产生:

myitem = {"Item": {"TITLE": params['title'],
                   "Description": "Some Text",
                   "CATEGORY_ID": params['category_id'],
                   "ISBN": params['isbn'],
                   "EAN": params['ean']
                   }
          }

请注意,在此阶段,类别ID与您的规格完全不符,但可以使用以下内容轻松获取

myitem["item"].append({"PrimaryCategory": myitem["item"].pop(["CategoryID"])})

利用pop的返回值,因此删除并重新添加"CATEGORY_ID": params['category_id']键值对,为您留下所需的结果(希望如此)。

答案 1 :(得分:1)

如果你可以改变你创建字典的方式只是用户字典理解:

myitem = {k: v for k, v in params.items() if v}

如果你已经拥有了dict并且你无法更改它的初始化,你可以删除这样的空值:

for k, v in myitems.items():
    if not v:
        del myitems[k]

答案 2 :(得分:1)

我认为以下代码可以满足您的需求。

d = {}

def addItem(name, description, params):
    d[name] = {}
    if 'title' in params:
        d[name]['Title'] = params['title']
    if 'category_id' in params:
        d[name]['PrimaryCategory'] = {"CategoryID" : params['category_id']}
    if 'isbn' in params:
        d[name]['ISBN'] = params['isbn']
    if 'ean' in params:
        d[name]['EAN'] = params['ean']
    d[name]['Description'] = description

params1 = {'title' : 'Boh'}
addItem('item1', 'item1 description', params1)
params2 = {'title' : 'Boh 2', 'isbn' : '12345'}
addItem('item2', 'item2 description', params2)
print d