我有一个字典,其中列表的名称为键,值为列表三(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新手,并欣赏任何可以解决的亮点!
答案 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))