2010-03-02 153 views
1

我有兩個文件,我加載到列表中。第一個文件的內容是這樣的:比較Python中的兩個列表項

d.complex.1 
23 
34 
56 
58 
68 
76 
. 
. 
. 
etc 
d.complex.179 
43 
34 
59 
69 
76 
. 
. 
. 
etc 

第二個文件的內容也是相同的,但具有不同的數值。請考慮從一個d.complex。*到另一個d.complex。*作爲一個集合。

現在我有興趣將一組第一個文件中的每個數值與第二個文件中各組的數值進行比較。我想記錄每個數字出現在第二個文件中的次數。

例如,d.complex.1中的數字23可能在文件2中出現了5次不同的集合。我想要做的就是記錄文件2中包含所有文件2的編號23的出現次數。

我最初的方法是將它們加載到列表中並進行比較,但我無法實現此目的。我在谷歌搜索,遇到集,但作爲一個蟒蛇noob,我需要一些指導。誰能幫我?

如果您覺得問題不清楚,請告訴我。我也粘貼完整的文件1和文件2瀏覽:

http://pastebin.com/mwAWEcTa http://pastebin.com/DuXDDRYT

回答

1

首先創建其中可以加載一個給定文件中的函數,你可能要保持個人組,也想算的發生每個數字,最好是有一個整個文件的字典,其中的鍵是設置名稱,例如complex.1等,爲每個這樣的組保持另一個字典中數字的設定,下面的代碼說明它更好

def file_loader(f): 
    file_dict = {} 
    current_set = None 
    for line in f: 
     if line.startswith('d.complex'): 
      file_dict[line] = current_set = {} 
      continue 

     if current_set is not None: 
      current_set[line] = current_set.get(line, 0) 

    return file_dict 

現在你可以很容易地編寫一個函數,將給出file_dict算一個數

def count_number(file_dict, num): 
    count = 0 
    for set_name, number_set in file_dict.iteritems(): 
     count += number_set.get(num, 0) 

    return count 

例如這裏是一個使用例

s = """d.complex.1 
10 
11 
12 
10 
11 
12""" 

file_dict = file_loader(s.split("\n")) 
print file_dict 
print count_number(file_dict, '10') 

輸出是:

{'d.complex.1': {'11': 2, '10': 2, '12': 2}} 
2 

您可能必須改進文件加載器,例如跳過空行,轉換爲int等

+0

那麼,如果它是一個文件,我的任務會很容易,但我必須比較兩個列表:( – forextremejunk 2010-03-02 15:36:42

+0

我不明白,爲什麼你不能加載這兩個文件,得到他們的字典,做你所做的一切想要用那些詞典,比較,統計整數,相交集等等 – 2010-03-03 03:34:25

2

使用Python的open函數打開文件,然後迭代所有行。檢查該行是否包含數字,如果是,則按照here所述的方法在defaultdict實例中增加其計數。

對其他文件重複此操作並比較得到的字符。