如何解决从 python 中的列表中提取元素
["Sports","Soccer","Cricket","Food","Noodles","Cake","Burger","Country","US","UK","China"]
我想用带键的字典制作运动、美食和乡村
所有运动总是跟随列表项“Sports”直到“Food”,所有列表项总是跟随“Food”等等,并且“Sports”、“Food”和“Country”不会重新出现。
因此类别是键,其相关项是值
如下图
cleaned_output = {
"Sports" : ["Soccer","Cricket"],"Food" : ["Noodles","Burger"],"Country" : ["US","China"]
}
我尝试这样做,但最终只有多个循环,请帮助我如何快速完成。
谢谢!
解决方法
你可以遍历key的列表,在数据列表中找到当前key的索引和下一个key的索引(如果当前是最后一个key,则为数据列表的长度),然后取中间的slice数据列表中的索引值。
data=["Sports","Soccer","Cricket","Food","Noodles","Cake","Burger","Country","US","UK","China"]
keys = ["Sports","Country" ]
out = {}
for idx,key in enumerate(keys):
currIndex = data.index(key)
nextIndex = data.index(keys[idx+1]) if idx<(len(keys)-1) else len(data)
out.update({key: data[currIndex+1:nextIndex]})
输出:
{'Sports': ['Soccer','Cricket'],'Food': ['Noodles','Cake','Burger'],'Country': ['US','UK','China']}
,
您可以通过对列表的单个循环轻松完成此操作。关键思想是记住您当前正在添加到哪个组,并在每次加入新组时更新。如果每个键只出现一次,你可以这样做:
data = [
"Sports","China"
]
cleaned_output = {
"Sports": [],"Food": [],"Country": []
}
for item in data:
if item in results:
# item is a group name; update current group
group = item
else:
# regular item; add to list for current group
cleaned_output[group].append(item)
,
用itertools.groupby
试试:
from itertools import groupby
data=["Sports","China"]
keys = {"Sports","Country" }
item_list = [[*v] for _,v in groupby(data,key=lambda x: x in keys)]
d = {k[0]: v for k,v in zip(*(iter(item_list),) * 2)}
时间复杂度O(n)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。