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

2024-09-30 07:22:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据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']
}
}

请注意,params的键与myitem的键不同


Tags: text参数字典titlesomedescriptionparamsitem
3条回答

我认为下面的代码符合您的要求

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

如果您可以更改创建dict的方式只需用户dict理解:

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

如果您已经将dict放在第一位,并且无法更改它的初始化,则可以删除空值,如下所示:

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

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

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']
                   }
          }

注意,在这个阶段,category id与您的规范不完全匹配,但是可以使用以下方法轻松地获取

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

它利用了pop的返回,因此它删除并重新添加了"CATEGORY_ID": params['category_id']键值对,从而得到所需的结果(希望如此)

相关问题 更多 >

    热门问题