【问题标题】:Appending values to a list inside nested dictionary in python将值附加到python中嵌套字典内的列表
【发布时间】:2020-07-22 00:03:31
【问题描述】:

我无法将值附加到嵌套字典中的列表。我正在尝试跟踪几年来在一组田地上种植的农作物。我的目标是能够以crops[year][field_name] 之类的方式搜索农作物列表。

这里是空的数据结构:

{2015: {'CP 4B1': [],
  'CP 4D1': [],
  'CP 1': [],
  'CP 5D': [],
  'CP 6C': [],
  'CP 3': [],
  'CP 4B': [],
  'CP 4D': [],
  'CP 4A': [],
  'CP 4C1': [],
  'CP 5C': [],
  'CP 6A': [],
  'CP 4A1': [],
  'EF 4A': [],
  'EF 5B': [],
  'EF 5A': [],
  'EF 1D': [],
  'EF 1E': [],
  'EF 1C': [],
  'ES 6A': [],
  'ES 6B': [],
  'EF 1A': [],
  'EF 1B': [],
  'EF 4C': [],
  'EF 4B': [],
  'FF 1': [],
  'FF 2': [],
  'FF 3': [],
  'HM 11': [],
  'HM 1': [],
  'HM 16B': [],
  'HM 2A': [],
  'HM 9C': [],
  'HM 9B': [],
  'HM 10': [],
  'HM 12': [],
  'HM 5': [],
  'HM 8': [],
  'HM 13': [],
  'HM 2B': [],
  'HM 6': [],
  'HF 13': [],
  'HF 12': [],
  'HF 2A': [],
  'HF 15B': [],
  'HF 15A': [],
  'HF 9': [],
  'MC 8': [],
  'MC 10': [],
  'MC 5': [],
  'MC 1': [],
  'MC 2': [],
  'MC 13': [],
  'MC 4': [],
  'MC 3': [],
  'MC 6': [],
  'MC 12': [],
  'MC 9': [],
  'MC 7': [],
  'MC 11A': [],
  'MC 11': [],
  'MC 14': [],
  'MC 14A': [],
  'MC 13A': [],
  'MC 2A': [],
  'RF 2A': [],
  'MS 8': [],
  'MS 16': [],
  'MS 21': [],
  'MS 17': [],
  'MS 11': [],
  'BSF 1B': [],
  'BSF 4A': [],
  'BSF 3': [],
  'BSF 1A': [],
  'BSF Orchard': [],
  'TF 4': [],
  'TF 3B': [],
  'TF 3A': [],
  'TF 5': [],
  'TF 11': [],
  'TF 8': [],
  'TF 1': [],
  'TF 2': [],
  'WA 3': [],
  'WA 7': [],
  'WA 5B': [],
  'WA 1': [],
  'WA 5A': []},
 2016: {'CP 4B1': [],
  'CP 4D1': [],
  'CP 1': [],
  'CP 5D': [],
  'CP 6C': [],
  'CP 3': [],
  'CP 4B': [],
  'CP 4D': [],
  'CP 4A': [],
  'CP 4C1': [],
  'CP 5C': [],
  'CP 6A': [],
  'CP 4A1': [],
  'EF 4A': [],
  'EF 5B': [],
  'EF 5A': [],
  'EF 1D': [],
  'EF 1E': [],
  'EF 1C': [],
  'ES 6A': [],
  'ES 6B': [],
  'EF 1A': [],
  'EF 1B': [],
  'EF 4C': [],
  'EF 4B': [],
  'FF 1': [],
  'FF 2': [],
  'FF 3': [],
  'HM 11': [],
  'HM 1': [],
  'HM 16B': [],
  'HM 2A': [],
  'HM 9C': [],
  'HM 9B': [],
  'HM 10': [],
  'HM 12': [],
  'HM 5': [],
  'HM 8': [],
  'HM 13': [],
  'HM 2B': [],
  'HM 6': [],
  'HF 13': [],
  'HF 12': [],
  'HF 2A': [],
  'HF 15B': [],
  'HF 15A': [],
  'HF 9': [],
  'MC 8': [],
  'MC 10': [],
  'MC 5': [],
  'MC 1': [],
  'MC 2': [],
  'MC 13': [],
  'MC 4': [],
  'MC 3': [],
  'MC 6': [],
  'MC 12': [],
  'MC 9': [],
  'MC 7': [],
  'MC 11A': [],
  'MC 11': [],
  'MC 14': [],
  'MC 14A': [],
  'MC 13A': [],
  'MC 2A': [],
  'RF 2A': [],
  'MS 8': [],
  'MS 16': [],
  'MS 21': [],
  'MS 17': [],
  'MS 11': [],
  'BSF 1B': [],
  'BSF 4A': [],
  'BSF 3': [],
  'BSF 1A': [],
  'BSF Orchard': [],
  'TF 4': [],
  'TF 3B': [],
  'TF 3A': [],
  'TF 5': [],
  'TF 11': [],
  'TF 8': [],
  'TF 1': [],
  'TF 2': [],
  'WA 3': [],
  'WA 7': [],
  'WA 5B': [],
  'WA 1': [],
  'WA 5A': []},

等等

我发现我可以通过以下所需路径访问该列表:crops[year]["field_name"],但是当我尝试使用crops[year]["field_name"].append('Corn') 附加到该列表时,程序会将“Corn”附加到具有该字段名称的所有列表中,而不管年。所以crops[2015]["Field 1"] 会有玉米,但crops[2016]["Field 1"]crops[2017]["Field 1"] 也会有玉米,即使我只打算使用crops[2015]["Field 1"].append('Corn') 将它附加到crops[2015]["Field 1"] 的列表中

我可能只是对如何导航数据结构感到困惑,但我们将不胜感激。

【问题讨论】:

  • 你是如何初始化列表的? python 中的一个常见缺陷是意外初始化列表列表以包含相同的引用,因此当您更新一个列表时,这可能就是它们都在更新的原因——它们都链接到相同的引用。
  • 我认为您应该向我们展示您尝试的解决方案的一些代码,否则我们很难在不给出完整代码的情况下帮助您(这不是我们在这里做的事情)

标签: python list dictionary nested


【解决方案1】:

一切如你所愿

crop_dict = {
  2015: {
  'CP 4B1': [],
  'CP 4D1': []
  },
  2016: {
  'CP 4B1': [],
  'CP 4D1': [],
  }}
crop_dict[2015]["CP 4B1"].append('Corn')
print(crop_dict[2015]["CP 4B1"])
print(crop_dict[2016]["CP 4B1"])

输出:

['Corn']
[]

【讨论】:

  • 嗯,我遵循了您的代码,它也对我有用。但是,当我在完整的数据结构上尝试相同的操作时,错误仍然会发生。 cropsByYearDB[2015]['CP 4D1'].append('Corn') cropsByYearDB' OUTPUT: {2015: {'CP 4B1': [], 'CP 4D1': ['Corn'], 'CP 1': [], 'CP 5D': [],...2016: {'CP 4B1':[],'CP 4D1':['Corn'],'CP 1':[],'CP 5D':[],'CP 6C':[],'CP 3':[],`
  • 发布您的完整数据结构,让我看看是否可以提供帮助
【解决方案2】:

你应该按照这个语法来追加/添加新值到你的字典,有几种方法可以解决这个问题,试试这两个选项(这是一个例子,你会有为您自己的问题实施它,希望对您有所帮助):

food_dict = {
   'Sauce': {
      'Tomato': [],
      'Mayo': []
   }
}

food_dict['Sauce']['Tomato'] = [5]

## or

for k in food_dict.keys():
  if k == "Sauce":
     food_dict[k]['Mayo'] = [100]
  

print(food_dict)

输出:

{'Sauce': {'Tomato': [5], 'Mayo': [100]}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 2019-09-20
    • 2021-06-08
    • 2023-02-02
    • 2019-03-29
    • 1970-01-01
    相关资源
    最近更新 更多