创建一个dict,如果它尚未创建,然后附加到它

时间:2018-03-22 18:27:49

标签: python dictionary nested

我有一个文件列表,我需要在其中选择几行中包含CommonChar的行,并且可以创建字典。 我感兴趣的文件中的行看起来像这样:

CommonChar uniqueName field value 

CommonChar uniqueName field1 value1

CommonChar uniqueName1 field value

CommonChar uniqueName1 field1 value1 

因此,我想要一个最终字典,它将在uniqueName和键值对上命名的内部字典存储为(field:value,field1:value1)

这样我将有一个基于uniqueName和键值对的内部字典的主dict。

最终输出应如下所示:

mainDic={'uniqueName': {'field':'value', 'field1':value1, 'field2':value2},
          'uniqueName1':{'field':'value', 'field1':value1, 'field2':value2} }

2 个答案:

答案 0 :(得分:0)

查看defaultdict!导入from collections import defaultdict。如果您从mainDict = defaultdict(dict)开始,如果您尝试分配密钥,它将自动创建字典。 mainDict['Apple']['American'] = '16'将像魔术一样发挥作用。

如果您需要在子词典中增加新键you can also put a defaultdict in a defaultdict

文档:https://docs.python.org/3/library/collections.html#collections.defaultdict

答案 1 :(得分:0)

'苹果'和'葡萄'因为它们是字符串,所以不能创建为字典。我假设你的程序中有一个流程 像这样:

  1. 创建一个包含有关苹果
  2. 的信息的字典
  3. 将该字典分配给变量apple
  4. 检查这个刚刚创建的字典是否已经在mainDict
  5. 如果没有,请将其添加到主键' Apple'

    下的mainDict值
    mainDict= {'Grapes':{'Arabian':'25','Indian':'20'} }
    apple = {'American':'16', 'Mexican':10, 'Chinese':5}
    
    if apple not in mainDict.values():
        mainDict['Apple'] = apple
    
    mainDict
    
  6. 输出:

    {'Apple': {'American': '16', 'Chinese': 5, 'Mexican': 10},
     'Grapes': {'Arabian': '25', 'Indian': '20'}}
    

    我认为你遇到的问题是,没有通用的方法来获得这个名字 一个对象作为字符串。 Dicts没有名称属性。请参阅以下答案:How can I get the name of an object in Python?