itertools/ groupby/ for 循环

问题描述

我最近一直在寻找一种更好的方法来检查 group 是否已被处理。预期的行在下面显示代码中 (if (key == group[0][0]):)。 我试图实现的想法如下:

如果满足上述条件,则必须在循环 for group in groups 的每一轮中对其进行检查。因此,在第一组中的所有项目都已打印后,for 循环将跳转到下一组并执行相同操作(在检查第二个条件 if (key == item[0]): 之后)。重点是防止 for 循环跳到下一组,因为键和每个项目的第一个元素之间没有匹配,这意味着;不会在那里找到或打印任何元素。话虽如此,我会避免不跳入任何其他具有另一个密钥的组,以节省时间和内存。

所以问题是;如果有更好的方法来实现这个想法,因为我自己的短语条件是一种原始条件(检查第一个单词是否与关键单词相同)。

非常感谢!

things = [("animal","lion"),("object","computer"),("animal","giraffe"),"tiger"),"table"),("clothes","jacket"),"dog")]
sorted_things = sorted(things)
groups = []
special_keys = []
for key,group in groupby(sorted_things,lambda x: x[0]):
    groups.append(list(group))
    special_keys.append(key)
counting = 0
for key in special_keys:
    print("These things are to this key " + key + " sorted: ")
    for group in groups:
        if (key == group[0][0]):
            for item in group:
                if (key == item[0]):
                    print("                                          ",item[1])

这是输出

These things are to this key animal sorted:
                                           dog
                                           giraffe
                                           lion
                                           tiger
These things are to this key clothes sorted:
                                           jacket
These things are to this key object sorted:
                                           computer
                                           table

解决方法

所以问题是;如果有更好的方法来实现这个想法

为了获得相同的输出,我会这样做:

from itertools import groupby
from operator import itemgetter

sorted_things = [
 ('animal','dog'),('animal','giraffe'),'lion'),'tiger'),('clothes','jacket'),('object','computer'),'table'),]

for key,values in groupby(sorted_things,key=itemgetter(0)):
    print(f'These things are to this key {key} sorted:')
    for key,value in values:
        print(' ' * 42,value)

注意groupby()函数已经有了逻辑,“在第一组中的所有项目都已经打印完后,for循环会跳转到下一组。”

不需要检查匹配键的第一个元素。 groupby() 函数已经为您做到了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...