我想根据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一样具有相同的密钥。
答案 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