【问题标题】:python dicts of dicts out of python dictspython dicts of dicts out of python dicts
【发布时间】:2019-08-28 20:53:35
【问题描述】:

我有预定义的字典,我需要一个函数来从几个输入字典中形成一个字典,其中键是输入字典的名称。

例如,我有以下内容:

double_left = {
    'left': 6
}

double_right = {
    'right': 6
}

输出应该是:

>>> output_dicts
{'double_left': {'left': 6}, 'double_right': {'right': 6}}

我已经尝试过: How do you create nested dict in Python? 但无法得出答案。

建议?

【问题讨论】:

  • 请说明您所说的“尝试过”是什么意思。
  • 您的问题不清楚。你会如何选择在你的最后一个字典中包含哪些字典?如果你想从他们的名字列表开始,你最好首先创建一个字典来结构化你的数据,而不是有相似但不相关的变量。
  • 你可以按字面意思做:{'double_left': double_left, 'double_right': double_right}.

标签: python python-3.x


【解决方案1】:

只需制作一本新字典。

output_dict = {"double_left": double_left, "double_right": double_right}
print(output_dict)

【讨论】:

【解决方案2】:

就像您当前的 dicts 有 'key': 'value' 对,您的值是整数 (6),您可以创建一个新的 dict,键是 dict 的名称,值是嵌套的 dict。

output_dicts = {'double_left': double_left, 'double_right': double_right}

>>> output_dicts
{'double_left': {'left': 6}, 'double_right': {'right': 6}}

您也可以使用dict_name[new_key] = new_value。 例如:

output_dicts['double_left'] = double_left
output_dicts['double_right'] = double_right

【讨论】:

    【解决方案3】:

    如果您想在不硬编码顶级项目名称的情况下动态执行此操作,您可以使用globals() 和/或locals() 按名称获取变量列表。例如:

    output = {}
    for name, val in globals().items():
        # Skipping variables that aren't dicts, and special
        # variables starting with '_'
        if isinstance(val, dict) and not name.startswith('_'):
            output[name] = val
    
    for name, val in locals().items():
        if isinstance(val, dict) and not name.startswith('_'):
            output[name] = val
    

    或更紧凑:

    output = {name:val for name, val in (list(locals().items()) +
                                         list(globals().items()))
              if isinstance(val, dict) and not name.startswith('_')}
    

    【讨论】:

    • 太棒了!然后它是一个函数 .. 使用 locals().items() 从其环境中获取项目
    • @criticalth 你可能没有充分的理由这样做。
    • 与内部软件集成不佳...:D
    【解决方案4】:

    试试这个

    Newdict = dict(double_left = { 'left': 6},double_right = 
    {'right': 6})
    

    【讨论】:

      猜你喜欢
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2018-07-10
      • 2018-04-30
      • 1970-01-01
      • 2016-07-27
      相关资源
      最近更新 更多