python插入或更新列表项的顺序

时间:2014-12-09 17:01:17

标签: python

我有一个python代码,它返回一个字典列表,类似于:

[{'colourCode': 'RE', 'sizeCode': 'S', 'sku': 'EP01-RE1'},
 {'colourCode': 'RE', 'sizeCode': 'M', 'sku': 'EP01-RE2'},
 {'colourCode': 'RE', 'sizeCode': 'L', 'sku': 'EP01-RE3'},
 {'colourCode': 'RE', 'sizeCode': 'XL', 'sku': 'EP01-RE4'},
 {'colourCode': 'RE', 'sizeCode': '2XL', 'sku': 'EP01-RE5'},
 {'colourCode': 'RE', 'sizeCode': 'XS', 'sku': 'EP01-RE0'},
 {'colourCode': 'RE', 'sizeCode': '3XL', 'sku': 'EP01-RE6'}]

对此进行排序的正确方法是什么,以便我得到,XS来到S

0 S
1 M
2 L
3 XL
4 2XL
5 XS
6 3XL
7 4XL
8 5XL

我有XXS

的条目

我的代码:

for idx, size in enumerate(sizes):
    size_short_name = size.get('sizeCode')
    print idx, size_short_name

唯一的方法,我能想到的是,创建一个新的大小列表,如果大小代码是XS,那么将其添加到乞讨等等。

任何建议都非常感激。

3 个答案:

答案 0 :(得分:0)

创建从大小字符串到排序顺序的映射:

sizes = {'XS': 0, 'S': 1, 'M': 2, ...}

然后在排序键中使用它:

sorted(inputlist, key=lambda entry: sizes.get(entry.get('sizeCode'), float('inf')))

我使用默认值float('inf')在最后放置任何缺失或无法识别的尺寸。如果你想要那些,请使用'-inf'

答案 1 :(得分:0)

使用自定义排序键排序可以解决问题

def sort_key(item):
    code = item['sizeCode']

    # Get the index for S, M and L where S is -1 and L is 1
    a = 'SML'.index(code[-1]) - 1

    # Get the X, 2X, 3X
    if code[0].isdigit():
        b = int(code[0])
    elif code[0] == 'X':
        b = 1
    else:
        b = 0

    return a, a * b

print sorted(sizes, key=sort_key)

结果:

[{'colourCode': 'RE', 'sizeCode': 'XS', 'sku': 'EP01-RE0'},
 {'colourCode': 'RE', 'sizeCode': 'S', 'sku': 'EP01-RE1'},
 {'colourCode': 'RE', 'sizeCode': 'M', 'sku': 'EP01-RE2'},
 {'colourCode': 'RE', 'sizeCode': 'L', 'sku': 'EP01-RE3'},
 {'colourCode': 'RE', 'sizeCode': 'XL', 'sku': 'EP01-RE4'},
 {'colourCode': 'RE', 'sizeCode': '2XL', 'sku': 'EP01-RE5'},
 {'colourCode': 'RE', 'sizeCode': '3XL', 'sku': 'EP01-RE6'}]

答案 2 :(得分:-1)

查看您的数据,并假设sku数字有一些逻辑,您可以将其用作

的键。
sorted(inputlist, key = lambda entry : entry["sku"])

这假设采用一致的方法来定义sku,例如“EP01”重复服装项目,“REn”表示尺寸。但是,一旦你有超过10个尺寸,这将失败。

它还具有以下优点:由于输入列表包含更多服装项目,因此结果将按大小和项目进行排序。