Python稀疏字典/重复值

时间:2017-02-06 22:47:07

标签: python dictionary optimization key

我有一个非常非常大的字典词典。通常值是相同的,似乎应该有一种方法通过引用相同的字典值来减小大小。

目前,我使用"两次传递方法来执行此操作;值是否具有同义词"然后查找同义词的值。

但理想情况下,一次性完成这项工作会很棒。

    animals = {
    'cat':{'legs':4,'eyes':2},
    'dog':{'legs':4,'eyes':2},
    'spider':{'legs':8,'eyes':6},
     }

我可以有一个价值"哺乳动物"这是用来说我说'猫':哺乳动物,但我希望能做的就是“狗”动物[' cat&#39 ]

因为作为参考,它应该占用更少的内存,这是目标。

我正在考虑一个班级来处理这个问题,但我不能成为第一个认为字典中的重复值可能会被压扁的人#34;不知怎的,并且宁愿以最蟒蛇的方式去做。

1 个答案:

答案 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以及其他人的不同答案提示使用参考。