python – 如何使用元组访问深层嵌套的字典?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何使用元组访问深层嵌套的字典?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2128字,纯文字阅读大概需要4分钟。
内容图文
![python – 如何使用元组访问深层嵌套的字典?](/upload/InfoBanner/zyjiaocheng/824/a4e27c1c921e49a9901095ab5f3608e9.jpg)
我想在nosklo的前一个答案中给出扩展the autovivification example以允许元组访问字典.
nosklo的解决方案如下所示:
class AutoVivification(dict):
"""Implementation of perl's autovivification feature."""
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
value = self[item] = type(self)()
return value
测试:
a = AutoVivification()
a[1][2][3] = 4
a[1][3][3] = 5
a[1][2]['test'] = 6
print a
输出:
{1: {2: {'test': 6, 3: 4}, 3: {3: 5}}}
我有一个案例,我想设置一个节点给定一些任意的下标元组.如果我不知道元组将有多少层,我该如何设计一种设置适当节点的方法?
我想也许我可以使用如下语法:
mytuple = (1,2,3)
a[mytuple] = 4
但是我无法想出一个有效的实施方案.
更新
我有一个基于@ JCash答案的完整工作示例:
class NestedDict(dict):
"""
Nested dictionary of arbitrary depth with autovivification.
Allows data access via extended slice notation.
"""
def __getitem__(self, keys):
# Let's assume *keys* is a list or tuple.
if not isinstance(keys, basestring):
try:
node = self
for key in keys:
node = dict.__getitem__(node, key)
return node
except TypeError:
# *keys* is not a list or tuple.
pass
try:
return dict.__getitem__(self, keys)
except KeyError:
raise KeyError(keys)
def __setitem__(self, keys, value):
# Let's assume *keys* is a list or tuple.
if not isinstance(keys, basestring):
try:
node = self
for key in keys[:-1]:
try:
node = dict.__getitem__(node, key)
except KeyError:
node[key] = type(self)()
node = node[key]
return dict.__setitem__(node, keys[-1], value)
except TypeError:
# *keys* is not a list or tuple.
pass
dict.__setitem__(self, keys, value)
使用扩展切片表示法可以实现与上述相同的输出:
d = NestedDict()
d[1,2,3] = 4
d[1,3,3] = 5
d[1,2,'test'] = 6
解决方法:
这似乎有效
def __setitem__(self, key, value):
if isinstance(key, tuple):
node = self
for i in key[:-1]:
try:
node = dict.__getitem__(node, i)
except KeyError:
node = node[i] = type(self)()
return dict.__setitem__(node, i, value)
return dict.__setitem__(self, key, value)
内容总结
以上是互联网集市为您收集整理的python – 如何使用元组访问深层嵌套的字典?全部内容,希望文章能够帮你解决python – 如何使用元组访问深层嵌套的字典?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。