重复值
假设我有Python中的字典和我的价值观键如下重复值
my_dict = {'a':5, 'b':4, 'c':6, 'd':3, 'e':2}
sorted_list = sorted(my_dict, key=my_dict.get)
sorted_list
['e', 'd', 'b', 'a', 'c']
这工作正常进行排序如何排序(字典,dict.get)工作,但如果我必须在碰撞我的字典(相对于值)
my_dict = {'a':5, 'b':4, 'c':5, 'd':3, 'e':2, 'f':4, 'g':3}
sorted_list = sorted(my_dict, key=my_dict.get)
sorted_list
['e', 'd', 'g', 'b', 'f', 'a', 'c']
在我看来,在重复的情况下,该列表由在字典顺序(数字顺序或插入顺序,不排定的顺序)进行排序。我能否假设它适用于所有情况?
EDIT1:我的钥匙将整数和情况的值冲突,我希望得到的钥匙由它们的值(最高的优先)
EDIT2进行排序:添加以下参数有助于我的问题。但是,就我而言,我希望按升序对值进行排序,但要按降序对键进行排序。以下将导致下降 key = lambda x:(x [1],x [0])
Python的排序算法(TimSort)是一种稳定的排序方式,因此任何具有相同排序值的项目',按照他们在排序前的顺序保存。
当对字典键进行排序时,这意味着它们的保存顺序与dict.keys()
返回的顺序相同,或者迭代字典时。请注意,这种排序是任意的,并且对字典的更改不稳定。
否则是的,你可以假设对所有情况都是正确的。
正如Steven Rumbalski指出的那样,你可以把钥匙与排序,以稳定同价值排序序顺:
sorted_list = sorted(my_dict, key=lambda k: (my_dict[k], k))
这取决于他在字典中的顺序。“如果他的意思是由'dict.keys()'返回的顺序,那么是的,这是真的,但如果他意味着在dict文字中出现的顺序,那么这个假设是不正确的。 –
@StevenRumbalski:我认定我的'是'一点,我意识到OP可能误以为他的字典定义可能已经指定了排序 –
我提出了一个问题有点更清晰。我的意思是插入顺序或数字顺序(不是排序顺序) –
这是不正确的。当值相同时,字典按键排序。这是修改的例子。
my_dict = {'a':5, 'b':4, 'c':5, 'z':3, 'e':2, 'f':4, 'g':3}
sorted_list = sorted(my_dict, key=my_dict.get)
print sorted_list
此计数器示例在不同的蟒蛇中可能不会产生相同的结果。另外,“按键排序”是指'my_dict.keys()'返回的*顺序*还是你的意思是按键值? –
有没有这方面的参考?因为我将在一个庞大的数据上运行这个数据,我想确定这是否正确 –
'sorted_list'是'['e','g','z','b','f','a ','c']'在我的Python 2.7.3和'['e','g','z','b','f','c','a']'在我的Jython 2.5中。 1+。正如@StevenRumbalski所说,这从Python实现到Python实现都有所不同,由于它不能保证任何事情的发生,它可能随着月球的相位而变化。 – DSM
这可能接近你要找的东西,使用pypy。注意我已经翻过了键和值;在一些有益的问题上,而在你的问题上可能会或可能不会。
#!/usr/local/pypy-1.8/bin/pypy
import py_treap
class Thing:
def __init__(self, number):
self.number = number
def __cmp__(self, other):
return -cmp(self.number, other.number)
def __str__(self):
return str(self.number)
def main():
list_ = [ ('a', 5), ('b', 4), ('c', 6), ('d', 3), ('e', 2), ('f', 4), ('g', 4), ('h', 3) ]
t = py_treap.treap()
for string, integer in list_:
thing = Thing(integer)
if not thing in t:
print '%s not in t' % thing
t[thing] = [ string ]
else:
print '%s in t' % thing
t[thing].append(string)
for sublist in t.values():
sublist.sort()
for key, value in t.items():
print key, value
main()
为提升则下降使第二项负:'排序(my_dict,键=拉姆达K:(my_dict [K] - K)'请注意,这只是给你整理密钥如果您需要排序的键值对,do:'sorted(my_dict.iteritems(),key = lambda item:(item [0],--item [1]))' –