2016-02-19 138 views
1

我需要一個非常簡單的練習幫助,我試圖執行,只是語法上我有點失落。Python:詞典中的詞典?

基本上我在含有15行3個元素(基本上是2個鍵和值)

  • 把這些元件到由字典的字典非常簡短的文本文件中讀取
  • 所述第一字典包含位置並且它是由該項目的類型多少和第二字典它的成本

例如:

 
Location Item  Cost 
------------------------ 
gymnasium weights 15 

market  cereal 5 

gymnasium shoes 50 

saloon  beer  3 

saloon  whiskey 10 

market  bread 5 

這將導致

{'gymnasium': {'weights': 15, 'shoes': 50}
等的其他鍵

基本上我需要遍歷這個文件,但我掙扎在內容類型的字典字典閱讀。此外,沒有那部分,我不知道如何將內部列表追加到外部列表中,如果外部列表中的鍵的實例發生。

回答

2

這看起來像家庭作業,所以我只會提供一些提示。

你可能知道,這是你如何創建一個新的字典:

d = {} 

添加到字典中的條目:

d[key] = value 

更具體地說,增加它的鍵爲一個字符串的條目,其價值是另一個字典:

d["gymnasium"] = {} 

現在,只要你寫d["gymnasium"]作爲較大表達式的一部分,您可以訪問該內部字典,並且可以對其執行常用字典操作,例如,使用[]=補充一下吧:

d["gymnasium"]["weights"] = 15 
+0

很好的解釋。還要記住,由於一個鍵可以是一個字符串,因此可以從一個變量輸入一個鍵。例如,如果我說'var =「weights」',我可以在代碼'd [「gymnasium」] [var] = 15'中使用它,以達到與Aasmund代碼的最後一樣的效果。 –

0

collections.defaultdict可能對你非常有用的,如果你允許使用STDLIB。它會自動創建不存在使用你定義一個函數任何鍵的,所以:

import collections 

dd = collections.defaultdict(dict) 
dd['a']['b'] = "foo" 

將產生如下的結構:

{'a': {'b': 'foo'}} 

如果您不能使用defaultdict,你會在分配給更深的字典之前,必須使用dict.setdefault或測試成員身份。

dd = {} 
location, item, cost = ("gymnasium", "weights", 15) 

# Either 
if location in dd: 
    dd[location][item] = cost 
else: 
    # dd[location] does not exist yet! 
    dd[location] = {item: cost} 

# Or 
dd.setdefault(location, {})[item] = cost 

# Or with defaultdict 
ee = collections.defaultdict(dict) 
ee[location][item] = cost # creates automagically