# `dictutils` -映射类型(OMD)¶

Python的核心有一个非常强大的映射类型： `dict` 键入。虽然功能齐全，但 `dict` 优先考虑简单性和性能。因此，它不会保留项目插入的顺序 , 它也不会为每个键存储多个值。这是一种快速、无序的1：1映射。

OMD的性能已经过调整，适合于广泛的用途，包括作为基本的无序多用途。特别感谢 Mark Williams 感谢他的所有帮助。

class boltons.dictutils.FrozenDict[源代码]

clear(*a, **kw)

classmethod fromkeys(keys, value=None)[源代码]

pop(*a, **kw)

popitem(*a, **kw)

setdefault(*a, **kw)

update(*a, **kw)

updated(*a, **kw)[源代码]

class boltons.dictutils.ManyToMany(items=None)[源代码]

get(key, default=frozenset({}))[源代码]
iteritems()[源代码]
keys()[源代码]
remove(key, val)[源代码]
replace(key, newkey)[源代码]

update(iterable)[源代码]

boltons.dictutils.MultiDict
boltons.dictutils.OMD
class boltons.dictutils.OneToOne(*a, **kw)[源代码]

```>>> oto = OneToOne({'a': 1, 'b': 2})
>>> print(oto['a'])
1
>>> print(oto.inv)
a
>>> len(oto)
2
```

```>>> oto.inv = 'c'
>>> print(oto.get('a'))
None
>>> len(oto)
2
```

clear() None.  Remove all items from D.[源代码]
copy() a shallow copy of D[源代码]
inv
pop(k[, d]) v, remove specified key and return the corresponding value.[源代码]

popitem()[源代码]

setdefault(key, default=None)[源代码]

classmethod unique(*a, **kw)[源代码]

```>>> OneToOne.unique({'a': 1, 'b': 1})
Traceback (most recent call last):
...
ValueError: expected unique values, got multiple keys for the following values: ...
```

```>>> a_dict = {'a': 2}
>>> OneToOne.unique(a_dict, b=2)
Traceback (most recent call last):
...
ValueError: expected unique values, got multiple keys for the following values: ...
```
update([E, ]**F) None.  Update D from dict/iterable E and F.[源代码]

class boltons.dictutils.OrderedMultiDict(*args, **kwargs)[源代码]

• 处理从URL解析的查询字符串

• 倒排词典以创建倒排索引(键的值)

• 以非破坏性的方式堆叠来自多个词典的数据

OrderedMultiDict构造函数与内置的 `dict` ，总的来说，该API构成了内置类型的直观超集：

```>>> omd = OrderedMultiDict()
>>> omd['a'] = 1
>>> omd['b'] = 2
>>> omd.get('a')
3
>>> omd.getlist('a')
[1, 3]
```

```>>> list(reversed(omd))
['b', 'a']
```

```>>> omd
OrderedMultiDict([('a', 1), ('b', 2), ('a', 3)])
>>> omd.poplast('a')
3
>>> omd
OrderedMultiDict([('a', 1), ('b', 2)])
>>> omd.pop('a')
1
>>> omd
OrderedMultiDict([('b', 2)])
```

```>>> from pprint import pprint as pp  # preserve printed ordering
>>> omd = OrderedMultiDict([('a', 1), ('b', 2), ('a', 3)])
>>> pp(omd.todict())
{'a': 3, 'b': 2}
>>> pp(omd.todict(multi=True))
{'a': [1, 3], 'b': }
```

```>>> OrderedMultiDict([('a', 1), ('b', 2), ('a', 3)]).items(multi=False)
[('a', 3), ('b', 2)]
```

`dict(omd)` 改变的行为 in Python 3.7 由于为支持从 `collections.OrderedDict` 到正在订购的内置词典。在3.7之前，结果将是一个新的字典，其中的值是列表，类似于 `omd.todict(multi=True)` (但只是浅层复制；这些列表是对OMD内部结构的直接引用)。从3.7开始，值变得单一，如下所示 `omd.todict(multi=False)` 。要获得可靠的跨版本行为，只需使用 `todict()`

```>>> omd = OrderedMultiDict([('a', -1)])
>>> omd
OrderedMultiDict([('a', -1), ('a', 0), ('a', 1), ('a', 2)])
```

clear()[源代码]

copy()[源代码]

counts()[源代码]

classmethod fromkeys(keys, default=None)[源代码]

get(k, default=None)[源代码]

getlist(k, default=_MISSING)[源代码]

inverted()[源代码]

```>>> omd = OMD([(0, 2), (1, 2)])
>>> omd.inverted().getlist(2)
[0, 1]
```

```>>> omd.inverted().inverted()
OrderedMultiDict([(0, 2), (1, 2)])
```
items(multi=False)[源代码]

iteritems(multi=False)[源代码]

iterkeys(multi=False)[源代码]

itervalues(multi=False)[源代码]

keys(multi=False)[源代码]

pop(k, default=_MISSING)[源代码]

popall(k, default=_MISSING)[源代码]

poplast(k=_MISSING, default=_MISSING)[源代码]

setdefault(k, default=_MISSING)[源代码]

IF密钥 k 在字典中，则返回它的值。如果不是，则插入 k 值为 default 然后回来 defaultdefault 默认为 `None` 。看见 `dict.setdefault()` 以获取更多信息。

sorted(key=None, reverse=False)[源代码]

• key (callable) -- 可调用以确定每个元素的排序关键字。可调用对象应期待一个 item (键-值对元组)。

• reverse (bool) -- 设为 `True` 来颠倒顺序。

```>>> omd = OrderedMultiDict(zip(range(3), range(3)))
>>> omd.sorted(reverse=True)
OrderedMultiDict([(2, 2), (1, 1), (0, 0)])
```

```>>> omd = OrderedMultiDict(zip('hello', 'world'))
>>> omd.sorted(key=lambda i: i)  # i is the key, i is the val
OrderedMultiDict([('o', 'd'), ('l', 'l'), ('e', 'o'), ('l', 'r'), ('h', 'w')])
```
sortedvalues(key=None, reverse=False)[源代码]

• key (callable) -- 可调用以确定每个元素的排序关键字的单参数。可调用对象应期待一个 item (键-值对元组)。

• reverse (bool) -- 设为 `True` 来颠倒顺序。

```>>> omd = OrderedMultiDict()
>>> somd = omd.sortedvalues()
>>> somd.getlist('even')
[2, 4, 6]
>>> somd.keys(multi=True) == omd.keys(multi=True)
True
>>> omd == somd
False
>>> somd
OrderedMultiDict([('even', 2), ('even', 4), ('odd', 1), ('odd', 3), ('even', 6), ('odd', 5)])
```

todict(multi=False)[源代码]

update(E, **F)[源代码]

update_extend(E, **F)[源代码]

values(multi=False)[源代码]

viewitems() a set-like object providing a view on OMD's items[源代码]
viewkeys() a set-like object providing a view on OMD's keys[源代码]
viewvalues() an object providing a view on OMD's values[源代码]
boltons.dictutils.subdict(d, keep=None, drop=None)[源代码]

```>>> from pprint import pprint as pp
>>> pp(subdict({'a': 1, 'b': 2}))
{'a': 1, 'b': 2}
>>> subdict({'a': 1, 'b': 2, 'c': 3}, drop=['b', 'c'])
{'a': 1}
>>> pp(subdict({'a': 1, 'b': 2, 'c': 3}, keep=['a', 'c']))
{'a': 1, 'c': 3}
```
{"ft_lang_label":"__label__zh","ft_lang_prob":0.7833187,"math_prob":0.9281646,"size":6707,"snap":"2023-14-2023-23","text_gpt3_token_len":3756,"char_repetition_ratio":0.15396091,"word_repetition_ratio":0.095454544,"special_character_ratio":0.31698227,"punctuation_ratio":0.19784173,"nsfw_num_words":0,"has_unicode_error":false,"math_prob_llama3":0.97988605,"pos_list":[0],"im_url_duplicate_count":[null],"WARC_HEADER":"{\"WARC-Type\":\"response\",\"WARC-Date\":\"2023-03-24T15:19:18Z\",\"WARC-Record-ID\":\"<urn:uuid:16e76ef4-1eba-4ea6-9af5-b63357377871>\",\"Content-Length\":\"106248\",\"Content-Type\":\"application/http; msgtype=response\",\"WARC-Warcinfo-ID\":\"<urn:uuid:92357d28-3ca4-4ddc-bd71-32f554f14721>\",\"WARC-Concurrent-To\":\"<urn:uuid:a22d4491-4956-42c9-b8fc-5cd459d10f18>\",\"WARC-IP-Address\":\"120.27.14.127\",\"WARC-Target-URI\":\"https://www.osgeo.cn/boltons/dictutils.html\",\"WARC-Payload-Digest\":\"sha1:HOBXRFUIRLDFEA4RKPM5KTXY3HSZKXEQ\",\"WARC-Block-Digest\":\"sha1:BCT3YPM4VQ4KNUMLE7UKJQ3STQ65OFC3\",\"WARC-Identified-Payload-Type\":\"text/html\",\"warc_filename\":\"/cc_download/warc_2023/CC-MAIN-2023-14/CC-MAIN-2023-14_segments_1679296945287.43_warc_CC-MAIN-20230324144746-20230324174746-00714.warc.gz\"}"}