2015-01-20 3 views
1

더 나은 설명을 위해 아래를 확인하십시오. 줄마다 한 줄씩 읽는 파일에 항목이 길어졌으며 특정 문자열이있는 모든 항목을 정렬하려고합니다. 단어에 sort의 요소가 포함되어 있지 않으면 사전에 추가됩니다. 어떻게해야합니까? 나는이 웹 사이트에서 다른 상황을 읽었지만, 나는 그것을 얻지 못한다 ... 그래서 이것은 중복 일지 모르지만 나는 이것을 어떻게하는지 설명 할 누군가가 필요하다. 문자열에 목록의 요소가 포함되어 있는지 확인하십시오.

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 

이미 답변을 가지고 있었으나 결국 문제는 명확하게하기 위해 (예 항목은 게임 TF2에서이다). 나는 종류의 목록을 실행하려면 : item_list을하고 난 배열을함으로써 그렇게하고 싶었 : 요소가있는 종류에서 어느 요소가있는 경우 item_list정렬은 그래서 각 요소를 확인하고 확인 그것. 그렇지 않은 경우 요소를 사전에 추가했습니다.

답변

5
>>> item_list = ["Non-Tradable Ubersaw", "Screamin' Eagle", "'Non-Craftable Spy-cicle"] 
>>> not_allowed = {"Non-Tradable", "Non-Craftable"} 

당신은 허용되지 않는 문자열 중 하나가

>>> filtered = [i for i in item_list if not any(stop in i for stop in not_allowed)] 
>>> filtered 
["Screamin' Eagle"] 
+0

왜 not_allowed가 설정되어 있습니까? –

+0

@PadraicCunningham 모든 요소가 고유하기 때문에 (항목이 중복되면 두 번 확인하는 것이 중요하지 않음) 항목 수가 많아지면'in' 연산은'list'보다'set'에 더 빠릅니다. – CoryKramer

+0

당신은 세트를 반복하고 있습니까? OP가 필터 항목을 생성하면 dups가 없습니다. –

1
당신은 종류에서 각 항목을 확인해야

는 무엇을하고 있는지 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 단순히 카운터 딕셔너리 사용에서 알 수 있듯이 :

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을 확인 할 필요가 없습니다.

+0

왜'items = Counter (item이 없다면 item_list에있는 항목 (정렬에 포함 된 단어) ')'? –

+0

@JonClements, 난 그냥 그런 식으로 할거야하지만 OP의 대답을 받아 들여진 질문에 대답을 받아들이면 이제는 아무런 의미가 없다. –

+0

잘 해주셔서 감사합니다. 응답 : – RasmusGP

0

난 당신이 파이썬을 사용하고 알고있는 현재 요소에 있는지 확인하는 any와 지능형리스트를 사용할 수 있지만 파일은 정말경우 거대한, 좋은 최적화는 bash와 같은 몇몇 저수준 명령을 사용하는 것입니다. 그냥 간단하게이 한 - 라이너 :

subprocess 모듈을 사용하여, 필요한 경우이 bash는 코드가 파이썬에서 실행될 수 있습니다 물론
$ grep "text you are searching" my_file.txt | sort 

.

다시 말하지만 파일이 크고 성능 최적화가 중요한 경우에만 유용합니다. bash 명령은 간단한 파이썬 루프보다 더 빠르게 작업을 수행합니다.

도움이되기를 바랍니다.