Python:如何存储成对或字符串数组之间的映射和浮点以实现快速访问?
我有一个成对的数组。一对中的每个元素都是字符串列表。对于每一对,我计算一个浮点值(表示两个列表之间的相似性分数)。我需要的是将其存储在某种类型的对象中,以便能够快速检索给定相应对的浮点值(如果该对不存在,则为0) 我的第一个想法是创建一个字典,并使用一个表示一对的元组作为字典键,但是由于元组的每个元素都是一个列表,所以这不起作用 当然,我可以创建一个Python:如何存储成对或字符串数组之间的映射和浮点以实现快速访问?,python,string,list,dictionary,tuples,Python,String,List,Dictionary,Tuples,我有一个成对的数组。一对中的每个元素都是字符串列表。对于每一对,我计算一个浮点值(表示两个列表之间的相似性分数)。我需要的是将其存储在某种类型的对象中,以便能够快速检索给定相应对的浮点值(如果该对不存在,则为0) 我的第一个想法是创建一个字典,并使用一个表示一对的元组作为字典键,但是由于元组的每个元素都是一个列表,所以这不起作用 当然,我可以创建一个(list1,list2,score12)元组数组,但如果给定一个list1,list2对,则在其中搜索会太慢。有更好的选择吗? 您可以将列表转换为
(list1,list2,score12)
元组数组,但如果给定一个list1,list2
对,则在其中搜索会太慢。有更好的选择吗?- 您可以将列表转换为
s,然后一对tuple可以用作字典键tuple
- 您也可以尝试将这对字符串列表移动到某个类的单独对象中(给它一个适合您的字段的名称)并将其用作键,但请注意不要使用相同的列表生成新对象
第一种方法有一个缺点-您将无法执行适当的列表操作,因为它们将是
tuple
s。但是,虽然列表足够小,但性能降级可以忽略不计。您可以使用字典将list1
和list2
转换为元组(元组是不可变的对象,它们可以是键)
编辑:显然,哈希不适用于列表:S您可以发布一些示例数据吗?您如何搜索值?类似于
如果列表1中的val1和列表2中的val2
?
class Key:
def __init__(self, lst1, lst2):
self.lst1 = lst1
self.lst2 = lst2
k = Key([], [])
d = {k: 1} # d[k] would be fine, but d[Key([], [])] will raise KeyError
dictionary[(tuple(list1), tuple(list2))] = scorevalue(list1, list2)