字典值列表按顺序排序?

时间:2015-05-31 19:04:37

标签: python list dictionary key

我有一个字典,其中列表的名称为键,值为列表三(str,int,int):

stafflist={'Name1':['Position', register number, sales],
           'Name2':['Position', register number, sales],
           'Name3':['Position', register number, sales]}

我需要将数据格式化为:

注册号码:位置,名称,销售

注册号码:位置,名称,销售

注册号码:位置,名称,销售

寄存器编号为数字顺序且位置,名称和销售额与正确的寄存器编号相关联。

我可以按顺序获取寄存器编号,转换为新列表,如下所示:

    regnumbers=[]
        for empname in stafflist:
            regnumbers.append(stafflist[name][1])

    regnumber.sort()

    for regnum in regnumbers[:]:
       if regnum in stafflist[name][1]:
           print('Reg #,regnum,':')

但我无法获取相关值或打印键的重新取样。我能够做的就是为所有注册号码打印一组其他值,而我根本无法获得要打印的键(名称)。

如果它不明显 - 全新的Python新手,并欣赏任何可以解决的亮点!

2 个答案:

答案 0 :(得分:0)

使用OrderedDict - 这是一种类似列表的词典。

import collections

# Sample data
staff_list = {
    "A": ["CEO", 1, 100000],
    "B": ["Clerk", 400, 2500],
    "C": ["Restocker", 200, 0],
}

new_staff_list = collections.OrderedDict()

# Sort by register number
# Sorting ahead of time is easier than sorting an OrderedDict
staff = sorted(staff_list.items(), key=lambda emp: emp[1][1])

for name, (position, number, sales) in staff:
    new_staff_list[number] = [position, name, sales]

print(new_staff_list[200])
# ['Restocker', 'C', 0]

答案 1 :(得分:0)

不是创建仅保存排序信息的排序regnumbers,而是迭代排序的人员列表:

# dict.items() is a sequence of (key, value)  tuples
for key, value in sorted(stafflist.items(), key=lambda kv: kv[1][1]):
    print('Reg #{}, Name: {}'.format(value[1], key))