[英]python insert or update order of list items
我有一個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,則將其添加到乞討中,依此類推。
任何建議,不勝感激。
創建一個從大小字符串到排序順序的映射:
sizes = {'XS': 0, 'S': 1, 'M': 2, ...}
然后在您的排序鍵中使用它:
sorted(inputlist, key=lambda entry: sizes.get(entry.get('sizeCode'), float('inf')))
我使用默認的float('inf')
在最后放置了所有丟失或無法識別的大小。 如果您想一開始使用'-inf'
。
使用自定義排序鍵進行排序可以解決問題
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'}]
查看您的數據,並假設sku編號有邏輯,您可以將其用作
sorted(inputlist, key = lambda entry : entry["sku"])
假定采用一致的方式定義SKU,例如“ EP01”代表服裝,“ REn”代表尺寸。 但是,一旦您擁有超過10種尺寸,這將失敗。
由於輸入列表中包含更多服裝項目,因此結果也將按大小和項目進行排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.