2012-11-30 205 views
0

我該如何創建一個字典,其中的鍵不僅表示一個字符串,還包含多個字符串(數組)? 因此,每個密鑰都綁定到一個數組,如果密鑰存在於另一個文件中,我可以繼續追加新的字符串?Python多維字典()

我是一個相對較新的Python程序員,所以我可以想象我的腳本是如何工作的......但是,我想不出正確的語法。

我有邏輯(我想),我只需要在Python中使用哪些模塊或函數的幫助。如果您需要參考我當前在Python中的知識,我大約是3/4通過Zed Shaw的Learn Python the Hard Way

讓我們去吧。例如:

文件1:

A 
B 
C 
D 

文件2:

Ted A 
Mike A 
Wilma B 
Frank C 
Dog D 
Fred D 

文件3:

Jon Ted 
Sid Ted 
Mic Mike 
Will Dog 
Tod Dog 

有希望的結果(寫入到文件4):

>A Ted Mike Jon Sid Mic 
>B Wilma 
>C Frank 
>D Dog Fred Will Tod 

因此,使用文件1作爲密鑰,如果密鑰存在,我們可以用文件2和3填充元素。文件2 A和D中的通知有多個答案。接下來查看文件3,我們進一步擴展;我們也看到Jon和Sid(file3)= Ted(file2)= A也是= Mike(file2)= Mic(文件3)

這是我的數據最簡單的例子(100,000個序列) ,真正的踢球者是我有五個分層擴展文件,不只是2(上面的例子)。

~~~回答~~~

謝謝FJ等

+0

試着看一下'collections.defaultdict',也許閱讀[自動激活] (http://en.wikipedia.org/wiki/Autovivification#Python)。 – JBernardo

+0

您只需將一個字典的元素設置爲一個數組,例如a ['foo'] = [1,2,3] –

+0

我不是100%肯定的,但也可以考慮看一個圖表http://en.wikipedia.org/wiki/Directed_graph - 因爲它聽起來像你'重新朝着那個方向前進...... –

回答

1

下面應該工作:

keys = [] 
data = {} 
names = {} 

for line in open('file1', 'r'): 
    keys.append(line.strip()) 
    data[line.strip()] = [] 

for line in open('file2', 'r'): 
    name, key = line.strip().split() 
    if key in data: 
     data[key].append(name) 
     names[name] = key 

for line in open('file3', 'r'): 
    nickname, name = line.strip().split() 
    if name in names: 
     data[names[name]].append(nickname) 

with open('file4', 'w') as file4: 
    for key in keys: 
     file4.write('>{0} {1}\n'.format(key, ' '.join(data[key]))) 
+0

你能幫我在最新的編輯中打印最終的代碼嗎?我只是想確保所有的數據都在哈希中正確。如果這是真的,我會在這裏感謝你的回答,你是否也可以解釋行數據= {}?就像說數據= dict() –

+0

@jon_shep一樣 - 剛編輯過,試試。 –

+0

@jon_shep是的,'data = {}'和data = dict()'是一樣的。欲瞭解更多信息,請查看這[問題](http://stackoverflow.com/questions/6610606/dict-literal-vs-dict-constructor-any-preferred)。 – Natan