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