虽然我已经搜索过,但我没有找到与我的程序有关的特定编码。
我有一个使用pickle加载到文件中的程序,数据存储为变量。数据是具有列表格式的值的字典。我被分配了一个任务,按每个键的最高分数对字典进行排序,然后从最高到最低排序最高分。
此外,我必须以用户友好的方式呈现我的发现,因此可能需要迭代循环。
答案 0 :(得分:0)
你可以用numpy从列表中创建一个数组。
from numpy import asarray
myarray = asarray(mylist)
然后使用sort()
或manualy:
dict = {'3': 'acs', '2': 'faas', '4': 'abs'}
arr = []
for k, v in dict.iteritems():
arr.append([k, v])
然后arr.sort()
如果是一维,或
print sorted(arr, key=lambda x: x[0], reverse=True)
如果它的多维度。
在评论讨论后编辑:
这是你需要的吗?
dict = {'Paul' : [ 1, 4, 2], 'Steve' : [2, 3, 1] , 'John' : [3, 2, 4] , 'Thomas' : [4,1, 3] }
arr = []
for k, v in dict.iteritems():
arr.append([k, v[0], v[1], v[2]])
print sorted(arr, key=lambda y: y[1]) # By first number
print sorted(arr, key=lambda y: y[2]) # By second number
print sorted(arr, key=lambda y: y[3]) # By third number
进一步讨论后EDIT2
这是一个修复它。我怀疑它是最有效的,我希望一些python大师会改进它。
dict = {'Paul' : [ 1, 4, 2], 'Steve' : [2, 3] , 'John' : [3, 2, 4] , 'Thomas' : [4,1, 3] }
arr = []
for k, v in dict.iteritems():
new = [k]
# add all values to the list
for i in range(0, len(v)):
new.append(v[i])
# if a list is shorter then 4 items, add zeros to fill it
while len(new) < 4:
new.append(0)
# put the new list in the main list
arr.append(new)
print arr
print sorted(arr, key=lambda y: y[1]) # By first number
print sorted(arr, key=lambda y: y[2]) # By second number
print sorted(arr, key=lambda y: y[3]) # By third number
如果你想在排序的另一端找到空的那个,你当然可以将while循环中的0改为999。
希望它能完成它,如果文件很大,它可能需要一些时间。