2014-10-28 142 views
0

我試圖創建將讀取對每行一個字一個文本文件中的函數,像Python的 - 套使用相同的密鑰

AFD
asmv
adsasd

詞典

這將需要用戶給定長度的文字,並將構建一個python字典,其中的密鑰是字母串中的字母排序。這些值將是一組具有相同密鑰的所有單詞。到目前爲止,我有:

def setdict(): 
wordfile = argv[1] 
open(wordfile, "r") 
setdict = {} 
for line in wordfile: 
    words = line.split() 
    for word in words: 
     word = word.rstrip("\n") 
     if word == wordlength: 
      key = str(sorted(word)) 

我有點失去了如何創建與具有相同的密鑰,並把它們在字典中的字集。任何幫助,將不勝感激。

+0

以供將來參考,在計算方面,你要找的總體思路是「多字典」(或「多映射「或」多映射「等) - 像一個字典(或地圖等),但每個鍵有多個值。這是知道正確的詞可以很容易地搜索答案的情況之一,但沒有這個詞幾乎是不可能的。 (你會發現,在Python中,多字典通常表示爲一個'dict',它的值可以是'set's或'list's的真實值,它通常用'collections.defaultdict'或'dict'上的'setdefault'方法,如Robᵩ的答案。) – abarnert 2014-10-29 00:58:23

回答

0

開始用一些簡單的

words = ["hello","python","world"] 
my_dict = {} 
for word in words: 
    try: 
     my_dict[sorted(word)].append(word) 
    except KeyError: 
     my_dict[sorted(word)] = [word] 

現在不是使用預定義的詞從一個文件

words = map(str.split,open("some_word_file.txt")) 
1

collections.defaultdict看他們在這裏是有用的:

from collections import defaultdict 
from pprint import pprint 


words = defaultdict(set) 

with open('input.txt') as input_file: 
    for line in input_file: 
     for word in line.split(): 
      sorted_list = sorted(word) 
      sorted_str = ''.join(sorted_list) 
      words[sorted_str].add(word) 

pprint(words) 

當然,任何你可以用defaultdict,你也可以用dict.setdefault()

words = dict() 
with open('input.txt') as input_file: 
    for line in input_file: 
     for word in line.split(): 
      sorted_list = sorted(word) 
      sorted_str = ''.join(sorted_list) 
      words.setdefault(sorted_str, set()).add(word) 
+0

+1。使用'defaultdict'肯定比測試'in'或使用'try' /'except'更好。當'defaultdict'不合適時(例如,因爲你需要一個實際的'dict',會引發'KeyError's),'words.setdefault'仍然比其他答案好。 – abarnert 2014-10-29 00:55:06

0

此處的關鍵是使用for循環訪問字典,該循環使值集可用於操作。你可以通過閱讀該文件面向行(readline的),並檢查以下解決您的問題:

for key, value in my_dict: 
    if sorted(word) == key: 
     value.append(word) 
    else: 
     my_dict[sorted(word)] = value