我有一本这样的字典:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-11-cb3db1328026> in <module>()
----> 1 a, b, c = gen_data(n, p, T, b)
2 #print(time.time() - tic)
<ipython-input-10-6f0fd2e2ab70> in gen_data(n, p, T, b)
10
11 # Computing the important controls
---> 12 H1 = np.transpose(np.random.multivariate_normal(mean = np.zeros(b), cov = Sigmah1, size = T))
13
14 # Computing the shocks z1t and the factor g_t stacked in G
TypeError: only integer scalar arrays can be converted to a scalar index
我想先按值递减排序,如果值相同,则按键(体裁名称)递减排序。 例如:
genre_dict = dict()
genre_dict = {'Action':Action, 'Adventure':Adventure, 'Comedy':Comedy, 'History':History, 'Horror':Horror, 'Romance':Romance}
genre_dict = OrderedDict(genre_dict)
我是通过lambda条件完成的,但是对我来说不起作用(最好说我做不到)。
答案 0 :(得分:3)
这可以使用正确的key
一步完成:
OrderedDict(sorted(genre_dict.items(), key=lambda x: (-x[1],x[0])))
OrderedDict([('Action', 3),
('Comedy', 2),
('History', 2),
('Horror', 2),
('Romance', 2),
('Adventure', 1)])
本质上,排序是基于:
[(-x[1],x[0]) for x in genre_dict.items()]
[(-3, 'Action'),
(-1, 'Adventure'),
(-2, 'Comedy'),
(-2, 'History'),
(-2, 'Horror'),
(-2, 'Romance')]
这个小技巧使tuple
中两个值的排序可以以ascending
的方式完成,这是默认的排序标准。否则,我们必须首先对第二个字段进行降序排序,然后对第一个字段进行升序排序。
答案 1 :(得分:1)
尝试
genre_dict = dict()
genre_dict = {'Action':3, 'Adventure':1, 'Comedy':2, 'History':2, 'Horror':2, 'Romance':2}
new_dict = OrderedDict(sorted(sorted([(k,genre_dict[k]) for k in genre_dict]), key=lambda x: -x[1]))
print(new_dict)
答案 2 :(得分:0)
根据定义,词典是(键,值)对,其中每个键都有唯一的值对。因此,输入无效。如果输入有效,则程序将按预期运行。