Python稀疏字典/重复值

2024-05-07 21:26:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

目前,我使用“Does value have synonym”的两次传递方法,然后是查找synonym的值

但在理想情况下,这将是伟大的,有一个方法来做到这一点,在一次去

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

我可以有一个值“maleman”,这样我就说了“cat”:哺乳动物,但我想能做的是“dog”:动物['cat']

因为作为一个参考,它应该占用较少的内存,这是目标

我正在考虑用一个类来处理这个问题,但我不是第一个认为字典中的重复值可能会被“压扁”的人,我更愿意用最python的方式来处理


Tags: 方法字典valuehave情况cat词典spider
1条回答
网友
1楼 · 发布于 2024-05-07 21:26:51

我认为对象和继承是做你想做的事情的更好的方法,也许除了对记忆的关注

要使用引用而不是复制每个字典的值,可以使用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}

不确定这是否是“最具Python性的方式”,顺便说一句,我认为这是正确的方式

另一种方法是使用weakref module。我对这个不太了解,看看这个post和其他人的不同答案关于使用引用的提示

相关问题 更多 >