python - 使用标志值在 Python 中高效双向映射

标签 python

在 Python 中,具有对象双向映射的最佳数据结构是什么,每对对象都有标志值?例如,假设我有两个要配对的男性和女性。我想要一个数据结构来存储配对,这样我就可以访问每个女人对应的男人,每个男人对应的女人,比方说,一个代表这对夫妇值(value)的数字。

关键特征是我想以恒定的时间(大约是字典中的键访问的时间)访问所有这些数据,而不会浪费资源进行构建。

如果不是因为“标志值”的特殊性,一个bidict来自 this post 中建议的图书馆绝对完美。事实上,每次我在我的 all-stars-couples 数据结构中添加一对时,它都会自动更新以避免一夫多妻制:

couples = bidict({ 
    'leonard' : 'penny',
    'howard'  : 'bernadette',
    'sheldon' : 'amy'
})
couples.forceput('stephen', 'amy')
print couples

>> bidict({'stephen': 'amy', 'leonard': 'penny', 'howard': 'bernadette'})

我现在正在寻求有关实现 quality 功能的最有效和 pythonic 方式的建议,例如:

quality('stephen', 'amy')

>> 0.4

couples.forceput('sheldon', 'amy', quality = 1.0)
quality('sheldon', 'amy')

>> 1.0

quality('stephen', 'amy')

>> Raise KeyError

最佳答案

考虑元组是可散列的。您可以创建一个 dict,将一对映射到您想要的任何数据,包括质量:

quality = dict()
quality[ ('stephen', 'amy') ] = 0.4

关于python - 使用标志值在 Python 中高效双向映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37433793/

相关文章:

python - 为什么 Pandas 中的 groupby 不打印所有列?

python - 使用 Python 脚本在 ADFS 上进行身份验证

python - 算法 : selecting points from a list

python - 如何使 SMTPHandler 不阻塞

python - 有没有一种简洁的方法来处理和忽略每行代码的异常

python - 使用python从文本文件中获取行的交集

python - 使用 ConfigObj 或 PyYaml 将字典对提取到交互式工作区中

python - 应用程序的每个模块都需要 Flask 实例化吗?

python - Django-formwizard 和 ModelFormSet 保存

java - 为什么按位左移在 Python 和 Java 中返回不同的结果?