我有一个非常非常大的字典词典。通常值是相同的,似乎应该有一种方法通过引用相同的字典值来减小大小。
目前,我使用"两次传递方法来执行此操作;值是否具有同义词"然后查找同义词的值。
但理想情况下,一次性完成这项工作会很棒。
animals = {
'cat':{'legs':4,'eyes':2},
'dog':{'legs':4,'eyes':2},
'spider':{'legs':8,'eyes':6},
}
我可以有一个价值"哺乳动物"这是用来说我说'猫':哺乳动物,但我希望能做的就是“狗”动物[' cat&#39 ]
因为作为参考,它应该占用更少的内存,这是目标。
我正在考虑一个班级来处理这个问题,但我不能成为第一个认为字典中的重复值可能会被压扁的人#34;不知怎的,并且宁愿以最蟒蛇的方式去做。
答案 0 :(得分:0)
我认为对象和继承是做你想要的更好的方式,除了可能是因为记忆的关注。
要使用引用而不是复制每个字典的值,可以使用ctypes模块:
import ctypes
animals = {'cat':{'legs':4,'eyes':2},'spider':{'legs':8,'eyes':6}}
# You put the value of animals['cat'] in ['dog']
animals['dog'] = id(animals['cat'])
animals
{'dog': 47589527749808, 'spider': {'eyes': 6, 'legs': 8}, 'cat': {'eyes': 2, 'legs': 4}}
# You can access to ['dog'] with
ctypes.cast(animals['dog'], ctypes.py_object).value
{'eyes': 2, 'legs': 4}
不确定它是否是“最pythonic方式”btw。 Imho课程是正确的方法。
使用weakref module可以采用另一种方法。我不太了解这一点,看看这个post以及其他人的不同答案提示使用参考。