gpt4 book ai didi

python - 从列表中选择符合特定条件的项目

转载 作者:行者123 更新时间:2023-12-01 05:05:56 26 4
gpt4 key购买 nike

我有一个包含这样的键的字典:

237870a/
237870b/
237870c/
115460a/
115460b/
115460c/
115460d/
229898/
212365a/
109678/

我需要迭代此键列表并提取某些项目:

  1. 对于共享相同数字前缀且末尾有字母字符的项目,我需要具有最高字符的项目,即在本例中 237870c115460d212365a

  2. 具有唯一编号且不带尾随字母字符的任何其他项目,即 229898109678

所以,我的结果应该是:

237870c/
115460d/
229898/
212365a/
109678/

抱歉,我没有任何代码可以显示,因为我真的不知道如何开始写这个......

最佳答案

首先,这与字典无关:正如您自己所说,您正在操作一个键列表。列表的来源并不重要。

您可以使用itertools.groupby为此,采用了巧妙的按键功能。为了让 itertools.groupby 正常工作,我们首先需要对键进行排序:

keys = sorted(keys)

然后我们必须考虑一个关键的功能。必须以某种方式设计,以便仅使用数字前缀进行分组:

def keyfunc(item):
if item[-1].isalpha():
return item[:-1]
return item

如果最后一个字符是字母,这将删除它,这样 itertools.groupby 在分组时不会考虑它。然后,我们将获取分组项的最后一个元素,这将是字母字符最大的元素。

现在我们可以应用groupby来获取您需要的项目列表:

items = [sorted(subitems)[-1] 
for _, subitems
in itertools.groupby(keys, keyfunc)]

查看实际效果:

>>> # output formatting and indentation by me
...
>>> keys
['237870a/', '237870b/', '237870c/', '115460a/',
'115460b/', '115460c/', '115460d/', '229898/',
'212365a/', '109678/']
>>> def keyfunc(item):
... if item[-1].isalpha():
... return item[:-1]
... return item
...
>>> items = [sorted(subitems)[-1]
... for _, subitems
... in itertools.groupby(keys, keyfunc)]
>>> items
['237870c/', '115460d/', '229898/', '212365a/', '109678/']

关于python - 从列表中选择符合特定条件的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25047034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com