【发布时间】:2023-03-05 11:04:01
【问题描述】:
我想创建一个数据结构,它可以接收一对键(字符串)并返回一个值(也可以是字符串)。无论输入 2 个键的顺序如何,我都想返回相同的值(例如 data[key1][key2] 返回与 data[key2][key1] 相同的值)。此描述是否有术语/概念?
我目前的实现是像这样创建一个 2D 字典:
my_dict = {'key1': {'key1': None,
'key2': 'foo',
...
'keyn': 'bar'},
'key2': {'key1': 'foo',
'key2': None,
...
'keyn': 'baz'},
...
'keyn': {'key1': 'bar',
'key2': 'baz',
...
'keyn': None}}
# Calling my_dict['key1']['key2'] and my_dict['key2']['key1'] both return 'foo', which is what I want and expect.
这对我来说似乎不对。我正在复制数据,当我只需要 (n * (n - 1))/2 时,我正在创建 n * n 个条目。
所以,我尝试创建一个键是元组的一维字典:
my_dict = {('key1', 'key2'): 'foo'}
但这不起作用,因为调用 my_dict[('key2', 'key1')] 会给我一个 KeyError
一维元组字典的一种解决方法是创建一个 try/except。
def get_value(my_dict, key1, key2):
try:
return my_dict[key1][key2]
except KeyError:
return my_dict[key2][key1]
这似乎不直观,感觉更像是解决问题的“创可贴”。
我没有测试过的一种方法是一维字典,其中键使用一个自定义类的实例,该类包含key1 和key2 作为属性。为此,对象必须是不可变且可散列的,其中散列函数将使用对象的属性并生成相同的“散列键”,而不管属性的顺序如何。我以前从未这样做过,也不知道该怎么做。这是正确的方法吗?我无法弄清楚这一点,我感到非常愚蠢,因为这似乎有一个简单的答案。
【问题讨论】:
标签: python dictionary data-structures