gpt4 book ai didi

Python "triplet"字典?

转载 作者:IT老高 更新时间:2023-10-28 21:13:32 24 4
gpt4 key购买 nike

如果我们有 (a1, b1)(a2, b2) 就很容易使用字典来存储对应关系:

dict[a1] = b1
dict[a2] = b2

我们可以得到 (a1, b1)(a2, b2) 没有问题。

但是,如果我们有 (a1, b1, c1)(a2, b2, c2),是否有可能得到类似的东西:

dict[a1] = (b1, c1)
dict[b1] = (a1, c1)

我们可以在哪里使用 a1b1 来获取三元组 (a1, b1, c2)?那有意义吗?我不太确定要使用哪种数据类型来解决这个问题。以上方法可行,但会有重复数据。

基本上,如果我有一个三元组,我可以使用哪种数据类型以便我可以使用第一个或第二个值来取回三元组?

最佳答案

解决方案

您可以编写自己的映射数据结构,允许添加三元组或任意大小的组,并使用 __getitem__ 恢复组。

class GroupMap:
def __init__(self):
self.data = {}

def add(self, group):
for item in group:
self.data[item] = group

def __getitem__(self, item):
return self.data[item]

group = (1, 2, 3)
group_map = GroupMap()

group_map.add(group)

print(group_map[1]) # (1, 2, 3)

请注意,此 GroupMap 可用于任何大小的组,而不仅仅是三元组。

上面的下一步是扩展类以避免碰撞发生时根据您想要的行为。

理论

您可能想知道是否有更好的方法来表示连接对象组。答案不是真的。

假设您有一个 graph包含 n 个顶点。那么对于要连接的图,您必须至少有 n - 1 条边。在上面的数据结构中,我在 dict 中使用了 n 条目,这意味着解决方案几乎是最优的。

如果可以,为什么不使用 n - 1 个条目?因为您随后需要遍历所有图表以恢复整个组。因此,多使用一条边可以进行 O(1) 查找,这是您可能需要权衡的一种方式。

关于Python "triplet"字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55892600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com