【问题标题】:Adjusting nested dictionary depending on provided key values根据提供的键值调整嵌套字典
【发布时间】:2017-02-03 22:19:42
【问题描述】:

我想根据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 相同的键。

【问题讨论】:

    标签: python dictionary conditional


    【解决方案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】:

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

      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
      

      【讨论】:

        【解决方案3】:

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

        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'] 键值对,从而为您提供所需的结果(希望如此)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-04
          • 1970-01-01
          • 1970-01-01
          • 2012-05-14
          • 2019-06-26
          相关资源
          最近更新 更多