在文件中的字典内的列表中进行数据排序

时间:2015-03-17 20:22:29

标签: python sorting dictionary

虽然我已经搜索过,但我没有找到与我的程序有关的特定编码。

我有一个使用pickle加载到文件中的程序,数据存储为变量。数据是具有列表格式的值的字典。我被分配了一个任务,按每个键的最高分数对字典进行排序,然后从最高到最低排序最高分。

此外,我必须以用户友好的方式呈现我的发现,因此可能需要迭代循环。

1 个答案:

答案 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。

希望它能完成它,如果文件很大,它可能需要一些时间。