簡體   English   中英

python插入或更新列表項的順序

[英]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'}]

什么是正確的排序方式,以便我得到XSS

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM