我有一个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,那么将其添加到乞讨等等。
任何建议都非常感激。
答案 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个尺寸,这将失败。
它还具有以下优点:由于输入列表包含更多服装项目,因此结果将按大小和项目进行排序。