2013-06-21 139 views
2

我想要做的是有一個字典即是這樣我可以使用一個值作爲另一個字典的關鍵嗎?

((category1: subcategory1, sub2, sub3), (cat2: sub12, sub22...)) 

不過,我也想在子類有自己的價值觀,以及:

((subcat1: subitem1, subitem2), (subcat2: subitem12, subitem22)...) 

我希望能夠以引用該子項,使其連接到原始類別,而不僅僅是子類別。有沒有辦法做到這一點?

編輯:

import json 
import win32com.client as win32 
from glob import glob 
import io 
import locale 
from collections import defaultdict 
import pprint 
#import re 
#importing needed clients 

raw_files = glob('*.xlsx') 
x = locale.getpreferredencoding() 
print x 
ex = win32.gencache.EnsureDispatch('Excel.Application') 
ex.Visible = False 
oFile = open("rawsort.txt", "w+") 
#oFile = io.open("rawsort.txt", "w+", encoding = "utf-8")#text dump 

for f in raw_files: 
ex.Workbooks.Open(f) 
sheet = ex.ActiveWorkbook 


#print sheet.Sheets("MRD").Cells(1,2).Value 
wincs = sheet.Worksheets('MRD') 
if sheet.Sheets("MRD").Cells(1, 3).Value== None: 
    wincs.Cells(1,3).Value = u'N/A' 
if sheet.Sheets("MRD").Cells(1, 4).Value== None: 
    wincs.Cells(1,4).Value = u'N/A' 
if sheet.Sheets("MRD").Cells(1, 5).Value== None: 
    wincs.Cells(1,5).Value = u'N/A' 
if not wincs.Cells(1,2).Value == None: 
      category[sheet.Sheets('MRD').Cells(1,2).Value][wincs.Cells(1,3).Value][wincs.Cells(1,4).Value] = wincs.Cells(1,5).Value 
    # print listy 
print sheet.Sheets('MRD').UsedRange.Rows.Count 
for x in xrange(2, sheet.Sheets("MRD").UsedRange.Rows.Count+1):#for loop to print  through paragraphs 
     if sheet.Sheets("MRD").Cells(x, 3).Value== None: 
      wincs.Cells(x,3).Value = u'N/A' 
     if sheet.Sheets("MRD").Cells(x, 4).Value== None: 
      wincs.Cells(x,4).Value = u'N/A' 
     if sheet.Sheets("MRD").Cells(x, 5).Value== None: 
       wincs.Cells(x,5).Value = u'N/A' 
     if not sheet.Sheets("MRD").Cells(x, 2).Value== None:  
       category[sheet.Sheets('MRD').Cells(x,2).Value][wincs.Cells(x,3).Value][wincs.Cells(x,4).Value] = wincs.Cells(x,5).Value 
#oFile.write(unicode(listy)) 
oFile.write("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n") 

oFile.close() 

然而,這是我的輸出:

problems

任何幫助嗎?

回答

1

你可能想要一個樹型數據結構。查看this github gist,瞭解如何在python中使用字典實現一個示例。

+0

嘿,我看了一下網站,並在我的代碼中運行它。我遇到了一些錯誤,將編輯我的文章 –

0

肯定的,但是字典只能有一個鍵和一個值相關聯在一起,除非你想要的值是一個元組或列表

你可以把字典用作查找

>>>ages = {'Jenny':26, 'Mike':30} 
>>>ages['Mike'] 
30 

這裏是一個例子

Dict2[Dict1['category1']] 
+0

這是無效的語法 – Eric

+0

等等,不是這樣。 ''珍妮':26,'邁克':30]'實際上叫'年齡.__ getitem __((切片('珍妮',26),切片('邁克',30)))...... ......不過,它是錯誤。 – Eric

+0

修正它剛纔在我的控制檯中運行,對不起,錯誤 – Stephan

1

你可以將其存儲這樣的:

categories = { 
    'category1': { 
     'subcat1': ['subitem1', 'subitem2'], 
     'subcat2': ['subitem12', 'subitem22'] 
    }, 
    'category2': { 
     # ... 
    } 
} 
1

這的確是,可以使用一個值作爲另一個字典的關鍵。我們始終在測試框架中執行此操作,而且這些測試框架是我們工作的地方。在我們的例子中,我們有一個字典,其中包含所有具有期望鍵的條目,而其他字典中都有一個名爲ID的值,其值是第一個字典中的鍵。你這樣做的方法如下:

value = dict1[dict2["key"]] 

,其中「關鍵」是的,當然,在dict2包含在dict1關鍵值的名稱。

當然,你可能想通過分配dict2["key"]到中間變量,以發揮它的安全(姑且稱之爲key對於我們的例子),然後檢查,實際上是在第一字典的關鍵,像這樣:

key = dict2["key"] 
if dict1.has_key(key): 
    value = dict1[key] 
else: 
    value = None 
+0

啊,謝謝!會嘗試。 –

相關問題