2015-05-31 7 views
0

У меня есть словарь со списком имен в качестве ключей и значений в списках трех (ул, 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,':') 

Но я не могу получить reaminder из соответствующих значений или ключей для печати. Все, что мне удалось сделать, это получить один набор других значений для печати для всех номеров регистров, и я не могу получить ключи (имена) для печати вообще.

Если это не очевидно - общий новичок Python и оцените любой свет, который можно пролить на это!

+0

Что такое переменная 'name' в ваших фрагментов кода? – martineau

ответ

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] 
0

Вместо того чтобы создавать отсортированный regnumbers, который только держит вашу информацию сортировки, перебирать отсортированный stafflist вместо:

# 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)) 
+0

Ваша печать должна быть: 'print ('Reg # {}, Name: {}'. Format (значение [1], key)) ' – Ladmerc

+0

@Ladmerc Вы правы, спасибо! В какой-то момент я планировал переименовать переменную, но потом на самом деле не придерживался ее. – poke

+0

Ваш лямбда будет работать только в Python 2 (где функция распаковки допускается в функциях). – Navith

Смежные вопросы