最近,我遇到了一些Java代码,这些代码只是将一些字符串放入Java TreeSet中,为其实现了基于距离的比较器,然后在日落时分将其快乐地计算出给定的分数来解决给定的问题。
我的问题,
是否有适用于Python的等效数据结构?
PS,只是要补充-我 可能可以 导入DictMixin或UserDict并实现我自己的排序/排序字典,并通过比较器函数来实现它-但这似乎是过大了。
谢谢。
更新。感谢您的回答。为了详细说明,可以说我有一个比较函数,其定义为(给定特定值ln),
def mycmp(x1, y1, ln): a = abs(x1-ln) b = abs(y1-ln) if a<b: return -1 elif a>b: return 1 else: return 0
我不确定如何将其集成到此处给出的有序dict链接中给出的排序中。
就像是,
OrderedDict(sorted(d.items(), cmp=mycmp(len)))
想法将受到欢迎。
的Python 2.7文档collections.OrderedDict具有指向在Python 2.4或更高版本上运行的OrderedDict配方的链接。
collections.OrderedDict
编辑: 关于排序:使用key=而不是cmp=。它倾向于导致更快的代码,此外,该cmp=关键字在Python3中已被删除。
key=
cmp=
d={5:6,7:8,100:101,1:2,3:4} print(d.items()) # [(1, 2), (3, 4), (100, 101), (5, 6), (7, 8)]
您发布的代码mycmp并不清楚您要传递的代码x1。下面,我假定X1应该是所述 值 中的每个键-值对。如果是这样,您可以执行以下操作:
mycmp
x1
length=4 print(sorted(d.items(),key=lambda item: abs(item[1]-length) )) # [(3, 4), (1, 2), (5, 6), (7, 8), (100, 101)]
key=...传递了一个函数lambda item: abs(item[1]-length)。对于每个itemin d.items(),lambda函数将返回数字abs(item[1]-length)。就排序而言,此数字充当该项目的代理。有关在Python中对习惯用语进行排序的更多信息,请参见本文。
key=...
lambda item: abs(item[1]-length)
item
d.items()
abs(item[1]-length)
PS。len是Python的内置函数。为了避免麻烦len,我将变量名称更改为length。
len
length