gpt4 book ai didi

Python dict 像满射多键→值容器

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:41 25 4
gpt4 key购买 nike

我目前需要一个具有类似功能的 Python 容器类,例如内置 dict 类型。基本上我需要的是一个字典,其中任意数量的键在主键旁边,映射到完全相同的值。但是,在迭代它时,它应该只迭代 (primary_key, value) 对,如果请求键列表,则只迭代主键。

如果这已经实现,我宁愿不重新发明轮子。那么是否已经有一个模块提供这样的容器呢?如果没有,我将自己实现。

最佳答案

这是一个快速实现:

class MultipleKeyDict(dict):
__slots__ = ["_primary_keys"]
def __init__(self, arg=None, **kwargs):
self._primary_keys = {}
self.update(arg, **kwargs)
def __setitem__(self, key, value):
super(MultipleKeyDict, self).__setitem__(key, value)
self._primary_keys.setdefault(value, key)
def __delitem__(self, key):
value = self[key]
super(MultipleKeyDict, self).__delitem__(key)
if self._primary_keys[value] == key:
del self._primary_keys[value]
for k, v in super(MultipleKeyDict, self).iteritems():
if v == value:
self._primary_keys[value] = k
break
def __iter__(self):
return self.iterkeys()
def update(self, arg=None, **kwargs):
if arg is not None:
if isinstance(arg, collections.Mapping):
for k in arg:
self[k] = arg[k]
else:
for k, v in arg:
self[k] = v
for k in kwargs:
self[k] = kwargs[k]
def clear(self):
super(MultipleKeyDict, self).clear()
self._primary_keys.clear()
def iteritems(self):
for v, k in self._primary_keys.iteritems():
yield k, v
def items(self):
return list(self.iteritems())
def itervalues(self):
return self._primary_keys.iterkeys()
def values(self):
return self._primary_keys.keys()
def iterkeys(self):
return self._primary_keys.itervalues()
def keys(self):
return self._primary_keys.values()

唯一麻烦的一点是它必须搜索整个字典以防主键被删除。

我省略了 copy()pop()popitem()setdefault()。如果您需要它们,则必须自己实现。

关于Python dict 像满射多键→值容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8300311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com