【问题标题】:FOR loop - sort by first element in a listFOR 循环 - 按列表中的第一个元素排序
【发布时间】:2021-11-12 05:28:50
【问题描述】:

我得到以下数据

{'Value': ['A000453', 'Product AB', 5.0]}
{'Value': ['A000201', 'Product UV', 10.0]}
{'Value': ['A000900', 'Product XY', 2.0]}

我可以循环输出,如下:

for i in x['data']:
    print('Order:', i['Value'][0])
    print('Product:', i['Value'][1])
    print('Amount:', int(i['Value'][2]))

有什么方法可以按第一个值对循环内的输出进行排序?

所以最后看起来像这样:

Order: A000201
Product: Product UV
Amount: 10

Order: A000453
Product: Product AB
Amount: 5

Order: A000900
Product: Product XY
Amount: 2

非常感谢。

【问题讨论】:

  • 不,您必须先对数据进行排序...
  • 你可以试试for i in sorted(x['data'], key=lambda x: x['Value'][0]):

标签: python python-3.x sorting


【解决方案1】:

您可以通过使用带有自定义键的sort 来实现。 例如:

x = [
    {'Value': ['A000453', 'Product AB', 5.0]},
    {'Value': ['A000201', 'Product UV', 10.0]},
    {'Value': ['A000900', 'Product XY', 2.0]}
    ]
x.sort(key= lambda x: x['Value'][0])

for i in x:
    print('Order:', i['Value'][0])
    print('Product:', i['Value'][1])
    print('Amount:', int(i['Value'][2]))

输出将是:

Order: A000201
Product: Product UV
Amount: 10

Order: A000453
Product: Product AB
Amount: 5

Order: A000900
Product: Product XY
Amount: 2

【讨论】:

  • 感谢您的快速回复。在这种情况下,使用 x.sort(key= lambda x: x['Value'][0]) 的解决方案对我来说是最好的。
【解决方案2】:

无按键功能:

data = [
    {'Value': ['A000453', 'Product AB', 5.0]},
    {'Value': ['A000201', 'Product UV', 10.0]},
    {'Value': ['A000900', 'Product XY', 2.0]},
]

for order, product, amount in sorted(d['Value'] for d in data):
    print('Order:', order)
    print('Product:', product)
    print('Amount:', int(amount))
    print()

【讨论】:

    【解决方案3】:

    通过这种方式,您可以按第一个元素对列表进行排序:

    data.sort(key=lambda x: x['Value'][0])
    

    【讨论】:

      【解决方案4】:

      试试operator.itemgetter:

      from operator import itemgetter as ig
      for x, y, z in sorted(map(ig('Value'), a), key=ig(0)):
          print('Order:', x)
          print('Product:', y)
          print('Amount:', int(z))
      

      【讨论】:

        猜你喜欢
        • 2016-08-09
        • 1970-01-01
        • 2016-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-08
        相关资源
        最近更新 更多