首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字典键作为字典

字典键作为字典
EN

Stack Overflow用户
提问于 2015-04-19 20:10:54
回答 2查看 293关注 0票数 0

问题

如何使用字典的键作为字典名,以先前的名称作为键?

下面是一个类似的问题:

到目前为止,我只找到了这个Python双向映射,它涵盖了双向映射的基本功能。

不过,我不想找到价值观的关键,但如下所示:

代码语言:javascript
复制
dict_one = { 'a': 123, 'b': 234 }
dict_two = { 'a': 567, 'b': 678 }
dict_one['a']
>> 123
dict_two['a']
>> 567
#... some magic (not simply defining a dict called 'a' though)
a['dict_one']
>> 123
a['dict_two']
>> 567

情况

我有许多字典存储不同对象的常量。每个对象都具有相同的属性(或对大多数对象来说是存在的)。为了简化循环中常量的调用,这两种方法都是有用的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-19 21:52:34

您可以定义从dict继承的自己的类来实现这一点,并重写__getitem__方法。但是这个解决方案也通过globals字典添加变量,而不是我前面的其他人提到的推荐实践。

代码语言:javascript
复制
class mdict(dict):
    def __getitem__(self, item):
        self.normal = dict(self)
        return self.normal[str(globals()[item])]

dict_one = {'a': 123, 'b': 234}
dict_two = {'a': 567, 'b': 678}

lst = [dict_one, dict_two]

for item in lst:
    for k, v in item.iteritems():
        dd = globals().setdefault(k, mdict())
        dd[str(item)] = v


>>> print a['dict_one']
123
>>> print b['dict_one']
234
>>> print a['dict_two']
567
>>> print b['dict_two']
678
票数 1
EN

Stack Overflow用户

发布于 2015-04-19 20:44:37

不应该使用以下解决方案,它修改了全局() (这种环境操作容易出错,应该尽可能避免!):

代码语言:javascript
复制
dict_one = { 'a': 123, 'b': 234 }
dict_two = { 'a': 567, 'b': 678 }

output = {}
for x in dict_one.keys():
    submap = output.get(x, {})
    submap["dict_one"] = dict_one[x]
    output[x] = submap

for x in dict_two.keys():
    submap = output.get(x, {})
    submap["dict_two"] = dict_two[x]
    output[x] = submap


# part 2
globs = globals()

for x in output:
    globs[x] = output[x]

print a['dict_two'] # 567

您应该做的就是简单地使用output作为抽象层(忽略前面代码片段的“第2部分”,而是使用):

代码语言:javascript
复制
print output['a']['dict_one'] #123
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29735270

复制
相关文章

相似问题

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