【问题标题】:Create a dict if its not already created and then append to it如果尚未创建字典,则创建一个字典,然后附加到它
【发布时间】:2018-03-22 18:27:49
【问题描述】:

我有一个文件列表,我需要在其中选择几行包含 CommonChar 的行并创建字典。 我感兴趣的文件中的行如下所示:

CommonChar uniqueName field value 

CommonChar uniqueName field1 value1

CommonChar uniqueName1 field value

CommonChar uniqueName1 field1 value1 

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

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

最终输出应如下所示:

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

【问题讨论】:

  • 'Apple' in mainDict...mainDict['Apple']={}......mainDict['Apple']['American']=33
  • 人们提到了会员检查,但 setdefault 确实是这里的方法。
  • 我已经更新了我的问题以使其更清楚......

标签: python dictionary nested


【解决方案1】:

查看默认字典!使用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

【讨论】:

  • 如果你想使用dict并手动检查,看起来上面有很多线程(例如可能的重复)。
【解决方案2】:

'Apple' 和 'Grapes' 不能创建为字典,因为它们是字符串。我假设您的程序中有一个流程可以进行 像这样:

  1. 创建包含苹果信息的字典
  2. 将该字典分配给变量 apple
  3. 检查刚刚创建的字典是否已经在 mainDict 中
  4. 如果没有,请将其添加到 mainDict 的值中,键为“Apple”

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

输出:

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

我认为您遇到的问题是没有通用的方法来获取名称 对象作为字符串。字典没有 name 属性。参考这些答案:How can I get the name of an object in Python?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2021-03-09
    • 2021-05-15
    • 2010-12-14
    • 2019-03-15
    相关资源
    最近更新 更多