我有以下字典列表
a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}]
我如何进行排序以获得以下结果:
a = [{43:123}, {3:103}, {36:103}, {2:102}, {23:100}]
我的意思是,按照字典值的大小对列表进行降序排序。
我有以下字典列表
a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}]
a = [{43:123}, {3:103}, {36:103}, {2:102}, {23:100}]
我的意思是,按照字典值的大小对列表进行降序排序。
sorted(a, key=dict.values, reverse=True)
a
字典中提取值以获得整数?
例如:for b in a:
print a[i].keys()
i+=1
但是Python仍然显示它是一个列表,我需要获得整数。我该怎么做? - user1403568for b in a: print b.keys()[0]
。这将提取键,因此您最终将打印出:43、3、36、2、23。如果您想要值(如123、103、36、102、100),请使用 b.values()[0]
。 - Hod - Monica's Army'<' not supported between instances of 'dict_values' and 'dict_values'
? - roschach>>> sorted(a, key=lambda i: i.values()[0], reverse=True)
[{43: 123}, {3: 103}, {36: 103}, {2: 102}, {23: 100}]
dict.values()
现在返回一个字典视图对象而不是列表。要从视图对象中提取值,我们可以使用iter
和next
的组合:a.sort(key=lambda dic: next(iter(dic.values())), reverse=True)
list.sort
和 sorted(list)
值得有两种不同的解决方案。 - jppitervalues
在py3中不存在。我想我本可以编辑那个答案,但那将是一个相当大的编辑,需要包括到iter
和next
的链接等等。 - Aran-Fey您可以向list.sort()
方法传递一个key
参数,这样比较将根据key
返回的值进行:
>>> a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}]
>>> a.sort(key=lambda d: d.values()[0], reversed=True)
>>> a
[{23: 100}, {2: 102}, {3: 103}, {36: 103}, {43: 123}]
d
并使用 .values()
获取其值列表的函数。由于只有一个值,我们从返回的列表中获取此唯一值。然后,list.sort()
方法将比较这些返回的值而不是字典本身进行排序。我宁愿使用(或至少记住).itervalues()
In [25]: sorted(a, key=lambda x: next(x.itervalues()), reverse=True)
Out[25]: [{43: 123}, {36: 103}, {2: 102}, {23: 100}, {3: 103}]