检查下方是否有更好的解释 我在一个逐行读取的文件中有一长串项目,我希望对其中包含特定字符串的所有项进行排序。如果单词不包含sort中的任何元素,则它将被添加到字典中。我怎么做?我已经阅读了本网站上的其他一些情况,但我只是不明白......所以这可能是重复的,但我需要有人来解释我如何做到这一点。 (是的,项目来自游戏TF2)
item_list = ("Non-Tradable Ubersaw", "Screamin' Eagle", "'Non-Craftable Spy-cicle"
sort = ("Non-Tradable", "Non-Craftable") # The items that are not allowed
for word in item_list:
if not sort in word:
if word in items: # add to the dictionary
items[word] += 1
else:
items[word] = 1
已经得到了回答,但只是为了澄清问题。 我想运行排序列表: item_list 我想通过创建一个数组来做到这一点: sort 所以它会检查 item_list 中的每个元素检查元素是否包含 sort 中的任何元素。如果没有,则将元素添加到字典中。
答案 0 :(得分:5)
>>> item_list = ["Non-Tradable Ubersaw", "Screamin' Eagle", "'Non-Craftable Spy-cicle"]
>>> not_allowed = {"Non-Tradable", "Non-Craftable"}
您可以使用any
列表推导来检查是否有任何不允许的子字符串在当前元素中
>>> filtered = [i for i in item_list if not any(stop in i for stop in not_allowed)]
>>> filtered
["Screamin' Eagle"]
答案 1 :(得分:1)
你需要检查sort中的每个项目是不是在每个单词中都没有比较每个单词的元组,这是if not sort in word
正在做的:
from collections import defaultdict
items = defaultdict(int)
for word in item_list:
if not any(ele in word for ele in srt):
items[word] += 1
值得添加,因为它实际上回答了问题。正如@JonClements所建议的那样只需使用Counter dict:
from collections import Counter
items = Counter(item for item in item_list if not any(word in item for word in sort))
使用defaultdict无需检查if word in items
。
答案 2 :(得分:0)
我知道你正在使用python,但如果文件真的很大,那么一个好的优化就是使用一些低级命令,例如bash。就像这个单行一样简单:
$ grep "text you are searching" my_file.txt | sort
当然,如果需要,可以使用subprocess
模块从python执行此bash代码。
同样,只有文件很大并且性能优化很重要时,这才有价值。 bash命令比简单的python循环更快地完成工作。
我希望它有所帮助。