【问题标题】:Python: Convert list to dict keys for multidimensional dict with exception handlingPython:将列表转换为具有异常处理的多维字典的字典键
【发布时间】:2016-08-03 15:12:42
【问题描述】:

我有一个多维字典的集合,如下所示

dict1 = {'key21':{'key31': {'key41':val41}, 'key32':{'key42':val42}}}

Apriori,我不知道字典的尺寸。我有大量可能的键,每个字典可能包含也可能不包含键。即使存在,键也可能不必按相同的顺序排列。

如果我从集合中创建一个可能的键值列表,比如说

list1 = ['key21', 'key32', 'key42']

如何将列表作为键传递,以便通过类似于get 命令的异常处理获得dict1['key21']['key32']['key42'] 的值

【问题讨论】:

  • 写一些代码是一个好的开始...

标签: python python-2.7 dictionary key


【解决方案1】:

您可以迭代地查询字典,如下所示:

dict1 = {'key21':{'key31': {'key41':41}, 'key32':{'key42':42}}}
list1 = ['key21', 'key32', 'key42']
#list1 = ['key21', 'key32', 'key42', 'bad-key'] # Test bad key
item = dict1
try:
    for key in list1:
            item = item[key]
except (KeyError, TypeError):
    print None
else:
    print item

KeyError 处理密钥不存在的情况。 TypeError 处理项目不是字典的情况,因此无法进行进一步查找。这是一个很容易被忽略的有趣案例(我第一次这样做)。

【讨论】:

  • 为什么不把item = dict1[list1[0]][list1[1]][list1[2]] 放在try 里面?
  • 根据 OP; “先验,我既不知道字典的维度也不知道键值”。
  • 如果键的深度与字典的深度相同,则可以正常工作。当keylist长度大于dict的维度时,你需要添加一个except for TypeError
  • 也许他是从用户那里得到的,甚至是从文件中得到的。
  • 那么钥匙的来源不知何故“知道”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 2015-07-23
相关资源
最近更新 更多