在形成字典的同时,我有很多同等的格式来成为字典值。所以,我想分享同等的冷冻。
以下是可能的解决方案之一:
result = dict()
helper = dict()
for key, value in generate_data(): # generate_data will return a lot of equal frozensets as values
result[key] = helper.setdefault(value, value)
在此解决方案中,helper
字典用于确定当前frozenset
在frozentset
中保存之前是否已经等helper
,如果没有 - 保存它在那里。所有艰苦工作都由setdefault
完成。
我不喜欢这个解决方案,一次很难理解(setdefault
的重要用法)
所以,我的问题是:
它是否可以用更易读和易懂的方式编写,仍然像这个解决方案一样简洁(或近乎简洁)?
答案 0 :(得分:1)
实现不会有所不同,但如果你不喜欢实际看到帮助器dict:
class Cache(object):
__slots__ = ['helper']
def __init__(self):
self.helper = dict()
def __call__(self, hashable):
return self.helper.setdefault(hashable, hashable)
你会像这样使用它:
result = dict()
cached = Cache()
for key, value in generate_data(): # generate_data will return a lot of equal frozensets as values
result[key] = cached(value)
这不应该使用比其他解决方案更少的内存,但从语法上来说它可能会更好看。
编辑:只想添加,这也允许类似:
result = dict((key, cached(value)) for key, value in generate_data())
或
result = {key:cached(value) for key, value in generate_data()}
如果您使用的是Python 2.7+。
答案 1 :(得分:0)
if value not in helper:
helper[value] = value
result[key] = helper[value]