首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以使用一个值作为另一个dict的键吗?

我可以使用一个值作为另一个dict的键吗?
EN

Stack Overflow用户
提问于 2013-06-22 00:28:30
回答 4查看 116关注 0票数 2

我想要做的是有一个像这样的字典

代码语言:javascript
复制
((category1: subcategory1, sub2, sub3), (cat2: sub12, sub22...))

但是,我也希望子类别也有自己的值:

代码语言:javascript
复制
((subcat1: subitem1, subitem2), (subcat2: subitem12, subitem22)...)

我希望能够引用子项,这样它就可以连接到原始类别,而不仅仅是子类别。有没有办法做到这一点?

编辑:

代码语言:javascript
复制
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()

然而,这是我的输出:

有什么帮助吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-22 00:36:44

您可能需要一个树数据结构。让我们看一看this github gist,了解如何用Python语言中的字典实现它。

票数 1
EN

Stack Overflow用户

发布于 2013-06-22 00:53:13

你可以这样存储它:

代码语言:javascript
复制
categories = {
    'category1': {
         'subcat1': ['subitem1', 'subitem2'],
         'subcat2': ['subitem12', 'subitem22']
    },
    'category2': {
        # ...
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-06-22 00:55:23

实际上,可以在另一个字典中使用一个值作为键。在我工作的测试框架中,我们一直在这样做。在我们的示例中,我们有一个字典,其中包含具有预期关键字的所有条目,而其他每个字典都有一个名为ID的值,它的值是第一个字典中的关键字。具体操作方法如下:

代码语言:javascript
复制
value = dict1[dict2["key"]]

其中" key“当然是包含dict1中的key的dict2中的值的名称。

当然,您可能希望安全起见,将dict2["key"]赋给一个中间变量(在我们的示例中称为key ),然后检查它是否真的是第一个字典中的键,如下所示:

代码语言:javascript
复制
key = dict2["key"]
if dict1.has_key(key):
    value = dict1[key]
else:
    value = None
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17240076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档