当前位置: 首页 > 面试题库 >

使用列表/元组元素作为关键字创建字典

边银龙
2023-03-14
问题内容

我需要生成一个这样的字典:

{
  'newEnv': {
     'newProj': {
        'newComp': {
           'instances': [],
           'n_thing': 'newThing'
        }
     }
  }
}

从一个元组中,如下所示:('newEnv','newProj','newComp','newThing')但仅当它尚不存在时。所以,我尝试了这个:

myDict = {}
(env,proj,comp,thing) = ('newEnv','newProj','newComp','newThing')

if env not in myDict:
    myDict[env] = {}
if proj not in myDict[env]:
    myDict[env][proj] = {}
if comp not in myDict[env][proj]:
    myDict[env][proj][comp] = {'n_thing': thing, 'instances': []}

这几乎可以正常工作,但不能确定它的效率如何,或者不确定是否应该这样做。有什么建议)??


问题答案:

您可以使用循环(仅使用前三个键,newThing而不是链中的键):

myDict = {}
path = ('newEnv','newProj','newComp')
current = myDict
for key in path:
    current = current.setdefault(key, {})

在这里current最终成为最里面的字典,让您在上面设置'n_thing''instances'键。

您可以用来reduce()将其折叠为单线:

myDict = {}
path = ('newEnv','newProj','newComp')
reduce(lambda d, k: d.setdefault(k, {}), path, myDict)

reduce调用返回最里面的字典,因此您可以使用它来分配最终值:

myDict = {}
path = ('newEnv','newProj','newComp')
inner = reduce(lambda d, k: d.setdefault(k, {}), path, myDict)
inner.update({'n_thing': 'newThing', 'instances': []})


 类似资料:
  • 问题内容: 因此,我对以下方面的理解: 当然,问题在于,如果存在多个具有相同值的s,则它们会折叠在一起,最后一个以那个唯一的唯一成员存在。我实际上想将结果字典的值列出: 这种理解是否可能? 问题答案: 您可以将元素一一添加到默认情况下包含空列表的字典中: 您也可以执行非常相似的操作,而不必使用collections模块: 但这可以说是不太清晰。 一个等效的,更清晰的(不需​​要“解析”不太常见的)

  • 问题内容: Python中是否有一种方法可以序列化使用元组作为键的字典: 只需使用json.dumps(a),就会产生: 问题答案: 您不能将其序列化为json,json对于什么算作dict键要比python灵活得多。 您可以将映射转换为键,值对的序列,如下所示:

  • 问题内容: 这个问题已经在这里有了答案 : 9年前关闭。 我有两个清单: 我需要从这些列表中创建一个元组列表,如下所示: 我尝试这样做: 但导致: 即x中每个元素与y中每个元素的元组列表…什么是我想做的正确方法?谢谢… 编辑: 在编辑之前提到的其他两个重复是我的错,我将其缩进另一个for循环中是错误的… 问题答案: 使用内置函数: 在Python 3中: 在Python 2中:

  • 我正在制作一个React应用程序,允许你制作一个列表并保存它,但React一直在警告我,我的元素没有唯一的关键道具(元素列表/列表表单)。如何为用户创建的元素创建唯一的关键道具?下面是我的代码 我的超文本标记语言:

  • 问题内容: 我有大量的这种格式的元组列表。每个元组的第二个字段是类别字段。 将其分解为相同类别(A,B,C等)的子列表的最有效方法是什么? 问题答案: 使用itertools.groupby: 产量 或者,要创建一个将每个组作为子列表的列表,可以使用列表理解: to的第二个参数是一个适用于(第一个参数)中每个项目的函数。预期会传回。然后将相同的所有连续项目组合在一起。 operator.itemg

  • 我有一个数据框,其中一些单元格包含多个值的列表。我不想在一个单元格中存储多个值,而是希望扩展dataframe,以便列表中的每个项都有自己的行(在所有其他列中都有相同的值)。因此,如果我有: 如何转换为长格式,例如: 索引并不重要,可以将现有列设置为索引,而最终的顺序并不重要。

  • 问题内容: 我正在制作一个React应用程序,该应用程序允许您创建列表并保存它,但是React一直警告我我的元素没有唯一的键道具(元素List / ListForm)。如何为用户创建的元素创建唯一的键道具?下面是我的React代码 我的HTML: 问题答案: 您可以通过多种方式创建,最简单的方法是在迭代数组时使用索引。 例 无论您将数据放在何处,都可以在此处将第二个参数传递 给回调,这将是它的值,

  • 问题内容: 例如,存储一百万个(32位)整数列表需要多少内存? 问题答案: 有用的链接: 如何获取python对象的内存大小/用法 python对象的内存大小? 如果将数据放入字典中,我们如何计算数据大小? 但是,他们没有给出明确的答案。要走的路: 使用/不使用列表来测量Python解释器消耗的内存(使用OS工具)。 使用第三方扩展模块,该模块定义某种sizeof(PyObject)。 更新 :