我要做的是有一个类似
的字典((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()
然而,这是我的输出:
任何帮助?
答案 0 :(得分:1)
您可能需要树数据结构。看一下this github gist,了解如何在python中实现一个带字典的例子。
答案 1 :(得分:1)
你可以这样存储:
categories = {
'category1': {
'subcat1': ['subitem1', 'subitem2'],
'subcat2': ['subitem12', 'subitem22']
},
'category2': {
# ...
}
}
答案 2 :(得分:1)
确实可以将值用作另一个字典中的键。我们一直在我工作的测试框架中这样做。在我们的例子中,我们有一个字典,其中包含具有预期键的所有条目,而其他字典每个都有一个名为ID的值,其值是第一个字典中的键。你这样做的方式如下:
value = dict1[dict2["key"]]
其中“key”当然是dict2中包含dict1中键的值的名称。
当然,您可能希望通过将dict2["key"]
分配给中间变量(我们将其称为key
作为示例)来安全地播放它,然后检查它是否实际上是第一个字典中的键,像这样:
key = dict2["key"]
if dict1.has_key(key):
value = dict1[key]
else:
value = None
答案 3 :(得分:0)
是的,但字典只能将一个键和一个值关联在一起,除非您希望该值为元组或列表
您可以将字典视为查找
>>>ages = {'Jenny':26, 'Mike':30}
>>>ages['Mike']
30
这是一个例子
Dict2[Dict1['category1']]