vik*_*sit 19 python java treeset data-structures
我最近遇到了一些Java代码,它们简单地将一些字符串放入Java TreeSet中,为它实现了一个基于距离的比较器,然后以快乐的方式进入日落以计算给定的分数来解决给定的问题.
我的问题,
是否有可用于Python的等效数据结构?
我看到有一个针对 OrderedDict的Py3K的PEP,但我使用的是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
Run Code Online (Sandbox Code Playgroud)
我有点不确定如何将这个集成到这里给出的有序字典链接中给出的顺序中.
就像是,
OrderedDict(sorted(d.items(), cmp=mycmp(len)))
Run Code Online (Sandbox Code Playgroud)
我们欢迎您的想法.
Python 2.7 文档collections.OrderedDict包含指向在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)]
Run Code Online (Sandbox Code Playgroud)
您发布的代码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)]
Run Code Online (Sandbox Code Playgroud)
key=...传递一个函数,lambda item: abs(item[1]-length).对于每个itemin d.items(),lambda函数返回数字abs(item[1]-length).就排序而言,此数字充当项目的代理.有关在Python中排序习语的更多信息,请参阅本文.
PS.len是一个Python内置函数.为了不破坏len,我已将变量名称更改为length.
| 归档时间: |
|
| 查看次数: |
16701 次 |
| 最近记录: |