微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用列表推导式对具有有序编号的元素进行排序

如何解决使用列表推导式对具有有序编号的元素进行排序

所以我正在尝试在 python 中学习列表推导式,是否可以使用连续/有序数字对元素的值进行排序?给定以下数据,类似这样

basket = {
    "basket1": [
        {"type": "Fruit","name": "Melon"},{"type": "Goods","name": "Hershey Bar"},....
    ],"basket2": [
        {"type": "Fruit","name": "Watermelon"},"name": "mineral"},}

我目前的结果:

1. Fruit
1.1 Melon
1.3 Watermelon
2. Goods
2.2 Hershey Bar
2.4 mineral

和这样的预期结果:

1. Fruit
1.1 Melon
1.2 Watermelon
2. Goods
2.3 Hershey Bar
2.4 mineral
# and so on

我尝试过的尝试是这样的。

def object():
    data = basket["basket1"] + inventory["basket2"]

    # using list comprehensions
    fruits = [
        f"1.{i} {x['name']} \n" for i,x in enumerate(data,1) if x["type"] == "Fruit"
    ]
    goods = [
        f"2.{i} {x['name']} \n" for i,1) if x["type"] == "Goods"
    ]

    if fruits and goods:
        print("1. Fruit: " + to_string(fruits))
        print("2. Goods: " + to_string(goods))

非常感谢您的支持

解决方法

在列表推导式中使用另一种列表推导式:

def object():
    data = basket["basket1"] + basket["basket2"]

    # using list comprehensions
    fruits = [
        f"1.{i} {x['name']} \n" for i,x in enumerate([d for d in data if d["type"] == "Fruit"],1)
    ]
    goods = [
        f"2.{i} {x['name']} \n" for i,x in enumerate([d for d in data if d["type"] == "Goods"],1)
    ]

    if fruits and goods:
        print("1. Fruit: " + to_string(fruits))
        print("2. Goods: " + to_string(goods))

更有效的方法是使用生成器表达式:

def object():
    data = basket["basket1"] + basket["basket2"]

    # using list comprehensions
    fruits = [
        f"1.{i} {x['name']} \n" for i,x in enumerate((d for d in data if d["type"] == "Fruit"),x in enumerate((d for d in data if d["type"] == "Goods"),1)
    ]

    if fruits and goods:
        print("1. Fruit: " + to_string(fruits))
        print("2. Goods: " + to_string(goods))
,

先排序然后在第二步重命名怎么样?

fruit = []
goods = []
for item in basket.values():
    for element in item:
        if element['type'] == 'Fruit':
            fruit.append(element['name'])
        elif element['type'] == 'Goods':
            goods.append(element['name'])
        else:
            pass

fruit = [f"1.{i} {x}" for i,x in enumerate(fruit,1)]
good = [f"2.{i} {x}" for i,x in enumerate(goods,len(fruit)+1)]

print("1. Fruit:\n" + '\n'.join(fruit))
print("2. Goods:\n" + '\n'.join(good))

>>>
1. Fruit:
1.1 Melon
1.2 Watermelon
2. Goods:
2.3 Hershey Bar
2.4 Mineral
,

您正在寻找数据的给定表示。 首先根据您的需要将您的数据以更实用的格式排列,然后根据所需的格式打印它们。

from collections import defaultdict

# a dictionary which elements are initialized as lists by default
data = defaultdict(list)

# group data by type (Good,Fruits,...)
for items in baskets.values():
    for item in items:
        data[item['type']].append(item['name'])
        
print(data)
defaultdict(<class 'list'>,{'Fruit': ['Melon','Watermelon'],'Goods': ['Hershey Bar','Mineral']})
# Print the data with the wanted format
for i,(k,v) in enumerate(data.items()):
    print(f"{i+1} {k}")
    for j,item in enumerate(v):
        print(f"{i+1}.{j+1} item")
1 Fruit
1.1 item
1.2 item
2 Goods
2.1 item
2.2 item
,

嗨,欢迎来到 python,你将度过一生的时光!
你可以问吗?答案是 99.9% 是。让我们看看如何:
首先让我们尝试改变我们提供答案的策略。
与其遍历整个篮子,不如先将它们排序到不同的列表中,然后枚举它们。

    def sort_it(baskets):
        aggregate = defaultdict(list)
        for _,items_list in basket.items():
            for item in items_list:
                aggregate[item["type"]].append(item["name"])

        for title,values,idx in enumerate(addregate.items(),1):
            print(f"{idx}. {title}: ")
            for item,num on enumerate(values):
                print("{idx}.{num} item")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?