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

posted on 2020-08-18 19:30  doubtful  阅读(1707)  评论(0编辑  收藏  举报

导航