小编典典

Java的TreeSet是否等效于Python?

python

最近,我遇到了一些Java代码,这些代码只是将一些字符串放入Java
TreeSet中,为其实现了基于距离的比较器,然后在日落时分将其快乐地计算出给定的分数来解决给定的问题。

我的问题,

  • 是否有适用于Python的等效数据结构?

    • Java树集看起来基本上是一个有序字典,可以使用某种比较器来实现这种排序。
    • 我看到有一个用于OrderedDict的Py3KPEP,但是我使用的是2.6.x。有很多有序的dict实施方式-特别值得推荐的人吗?

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)))

想法将受到欢迎。


阅读 208

收藏
2021-01-20

共1个答案

小编典典

的Python
2.7文档collections.OrderedDict具有指向在Python
2.4或更高版本上运行的OrderedDict配方的链接。

编辑:
关于排序:使用key=而不是cmp=。它倾向于导致更快的代码,此外,该cmp=关键字在Python3中已被删除。

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应该是所述 中的每个键-值对。如果是这样,您可以执行以下操作:

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中对习惯用语进行排序的更多信息,请参见本文

PS。len是Python的内置函数。为了避免麻烦len,我将变量名称更改为length

2021-01-20