zoukankan      html  css  js  c++  java
  • Django MultiValueDict

    from django.utils.datastructures import MultiValueDict
    

    MultiValueDict 是 dict 的子类,可以处理一个 key 对应多个 value 的情况

    结构

    构造函数

    def __init__(self, key_to_list_mapping=())
    

    虽然传给构造函数的是 value 为 list 的字典。但是 MultiValueDict 的结构并不是这样的

    示例:

    m_dict = MultiValueDict({'a': ['1', '2'], 'b': ['1']})
    print(m_dict['a'])
    

    输出结果:

    2
    

    并没有得到一个 list ,因为 MultiValueDict 的 get 方法返回的是最新的一个数据

    方法

    get

    get 用于获取一个 key 对应的最新的 value,如果没有就会返回 default

    get(self, key, default=None)
    

    getlist

    getlist 用于获取一个 key 对应的所有 value 的列表,如果没有找到返回 default

    getlist(self, key, default=None)
    

    setlist

    setlist 用于设置一个 key 对应的 value 列表,如果 key 已经存在则替换原来的 value 列表,如果不存在则创建新的键值对

    setlist(self, key, list_)
    

    setdefault

    setdefault 用于初始化一个键值对,如果对应的 key 不存在就会创建一个,对应的 value 为 [default]

    setdefault(self, key, default=None)
    

    示例:

    m_dict = MultiValueDict({'a': ['1', '2'], 'b': ['1']})
    print(m_dict)
    m_dict.setdefault('b')
    m_dict.setdefault('c')
    print(m_dict)
    

    输出结果:

    <MultiValueDict: {'a': ['1', '2'], 'b': ['1']}>
    <MultiValueDict: {'a': ['1', '2', '3'], 'b': ['1'], 'c': [None]}>
    

    因为本来 'b' 已经存在,所以直接跳过,只初始化一个 'c': [None]

    setlistdefault

    setlistdefault 用于初始化一个键值对,如果对应的 key 不存在就会创建一个,对应的 value 为 default,默认的 value 为 []

    setlistdefault(self, key, default=None)
    

    示例:

    m_dict = MultiValueDict({'a': ['1', '2'], 'b': ['1']})
    print(m_dict)
    m_dict.setlistdefault('c')
    m_dict.setlistdefault('d', default_list='d')
    print(m_dict)
    

    输出结果:

    <MultiValueDict: {'a': ['1', '2'], 'b': ['1']}>
    <MultiValueDict: {'a': ['1', '2', '3'], 'b': ['1'], 'c': [], 'd': 'd'}>
    

    items & values

    两个方法都会返回一个生成器
    item 每次会返回一个元祖,其中包含了 key 和 key 对应的最新的 value
    values 每次只会返回最新的 value

    m_dict = MultiValueDict({'a': ['1', '2'], 'b': ['1']})
    for i in m_dict.items():
    	print(i)
    for i in m_dict.values():
    	print(i)
    

    输出结果:

    ('a', '2')
    ('b', '1')
    2
    1
    

    lists

    lists 方法会返回一个
    每次返回一个元祖,其中包含 key 和 key 所对应的 value list

    m_dict = MultiValueDict({'a': ['1', '2'], 'b': ['1']})
    for i in m_dict.lists():
    	print(i)
    

    输出结果:

    ('a', ['1', '2'])
    ('b', ['1'])
    

    dict

    dict 方法会将 MultiValueDict 转为 Dict,Dict 的 value 为 MultiValueDict 对应 key 的 value 中最新的

    update

    update 用于更新 MultiValueDict,会将用于更新的字典的值添加到对应 key 的 value 后
    用于更新的字典可以是 MultiValueDict 也可以是普通字典类型

    m_dict = MultiValueDict({'a': ['1', '2'], 'b': ['1']})
    update_dict = MultiValueDict({'a': ['1', '3'], 'c': ['1']})
    m_dict.update(update_dict)
    print(m_dict)
    

    输出结果:

    <MultiValueDict: {'a': ['1', '2', '1', '3'], 'b': ['1'], 'c': ['1']}>
    
  • 相关阅读:
    大话设计模式——UML图
    IdentityServer3零星笔记
    Angular路由
    基于jquery的静态页面翻页
    00_python安装与配置(mac)
    OracleParameter.UdtTypeName的值必须是全大写!
    VS2012调用64位IIS Express
    MVC中使用Ueditor
    优秀博客站点
    jqGrid中的formatter
  • 原文地址:https://www.cnblogs.com/dbf-/p/13525445.html
Copyright © 2011-2022 走看看