如何返回有序的数组名称?

问题描述 投票:0回答:4

我有一个数组,我想从低到高排序,但我希望它返回数组名称(G,F,H ...),而不仅仅是数字。我该怎么做呢?

A=12.74087388       
B=12.48817861
C=12.31249807
D=12.95688859
E=12.49693343
F=11.51090636
G=10.16505019
H=11.99872655

Array=np.array([A,B,C,D,E,F,G,H])
sort=np.sort(Array)
python sorting
4个回答
3
投票

使用字典:

d = dict(A=12.74087388,       
B=12.48817861,
C=12.31249807,
D=12.95688859,
E=12.49693343,
F=11.51090636,
G=10.16505019,
H=11.99872655)

并按值排序:

>>> sorted(d, key=d.get)
['G', 'F', 'H', 'C', 'B', 'E', 'A', 'D']

或保留数字并按值排序:

from operator import itemgetter
print(sorted(d.items(), key=itemgetter(1)))

输出:

[('G', 10.16505019),
 ('F', 11.51090636),
 ('H', 11.99872655),
 ('C', 12.31249807),
 ('B', 12.48817861),
 ('E', 12.49693343),
 ('A', 12.74087388),
 ('D', 12.95688859)]

2
投票

正如@jonrsharpe指出的那样,变量名称不是这些值的属性,因此您必须以不同方式附加它。我认为最简单的方法是这样做:

my_array = [[12.74087388, 'A'], [12.48817861, 'B'], etc]
my_sorted_array = sorted(my_array)
my_sorted_named_array = [i[1] for i in my_sorted_array]

0
投票

这是一个基于字典的解决方案,如评论中所建议的那样。

lst = [12.74087388, 12.48817861, 12.31249807, 12.95688859,
       12.49693343, 11.51090636, 10.16505019, 11.99872655]

d = dict(zip(list('ABCDEFGH'), lst))
sorted_names = list(zip(*sorted(d.items(), key=lambda x: x[1])))[0]

# ('G', 'F', 'H', 'C', 'B', 'E', 'A', 'D')

0
投票

我想你更喜欢元组列表而不是字典,以防你有重复的字母。

data = [
  ('A', 12.74087388),
  ('B', 12.48817861),
  ('C', 12.31249807),
  ('D', 12.95688859),
  ('E', 12.49693343),
  ('F', 11.51090636),
  ('G', 10.16505019),
  ('H', 11.99872655)
]
dt = np.dtype([('letter', np.unicode_, 1), ('num', np.float64)])
arr = np.array(data, dtype=dt)
arr.sort(order='num')
© www.soinside.com 2019 - 2024. All rights reserved.