【问题标题】:How To Add Specific Keys In Nested Dictionary In Python如何在 Python 中的嵌套字典中添加特定键
【发布时间】:2021-12-23 12:19:32
【问题描述】:

我的字典格式可能有误(我第一次这样做)

我有一个包含正确 ID 的每个省份的字典,并将其添加到值“加拿大”。我正在尝试在嵌套字典中添加所有省份的人口

    ontario = dict(capital="Toronto", largest="Toronto", population=14826276)
    quebec = dict(capital="Quebec City", largest="Montreal", population=8604495)
    nova_Scotia = dict(capital="Halifax", largest='Halifax', population=992055)
    new_Brunswick = dict(capital="Fredricton", largest='Moncton', population=789225)
    manitoba = dict(capital="Winnipeg", largest="Winnipeg", population=1383765)


canada = {ontario, quebec, nova_Scotia, new_brunswick, manitoba, british_columbia, prince_edward_island, saskatchewan, alberta, newfoundland_and_labrador}


 for key, value in canada.items():
        if value and 'population' in value.keys():
            # Adding all values of population to receive total population of canada
            sum += value['population']
            print(sum)

再次提前感谢。

【问题讨论】:

  • 您是否遇到错误?如果是这样,有什么错误?或者,什么不符合您的预期?
  • 我认为这是最简单的方法...sum_ = sum(map(lambda p: p["population"], canada))。仅供参考,你循环它的方式是错误的,因为 canada 这里是 set 而不是 dictionary
  • @enaielei 啊,我明白了。我认为这就是我遇到的问题,我得到一个 TypeError: unhasable type。我如何将此列表转换为字典?
  • @jump 为什么要将它作为dict?例如,您可以以canada["ontario"]["population"] 的身份访问它吗?如果是这种情况,那么请像您在您的省份那样做...canada = dict(ontario=ontario)。另外,如果你错过了,获得总和的最简单方法是通过我使用sum 函数提供的代码。
  • 您的canada 不是dictionary 而是set()。你需要canada = {'regions': [ontario, quebec, ...]}canada = {"Ontario": ontarion, "Quebec": quebec} 然后你可以(在for-loop 之后)canada["total_population"] = sum

标签: python function dictionary for-loop nested


【解决方案1】:
  1. 我只将列出的 5 个省份添加到嵌套字典中。
  2. 我使用了一个 for 循环来计算加拿大的总人口( 列出的 5 个省份的总和)。

请注意,我的嵌套字典与普通字典的格式相同, "a key: value" --> "1: ontario"

ontario = dict(capital="Toronto", largest="Toronto", population=14826276)
quebec = dict(capital="Quebec City", largest="Montreal", population=8604495)
nova_Scotia = dict(capital="Halifax", largest='Halifax', population=992055)
new_Brunswick = dict(capital="Fredricton", largest='Moncton', population=789225)
manitoba = dict(capital="Winnipeg", largest="Winnipeg", population=1383765)

canada = {1:ontario, 2:quebec, 3:nova_Scotia, 4:new_Brunswick, 5:manitoba}
#canada = {ontario, quebec, nova_Scotia, new_brunswick, manitoba, british_columbia, prince_edward_island, saskatchewan, alberta, newfoundland_and_labrador}

sum = 0
for providence in canada:
    # Adding all values of population to receive total population of canada
    sum += (canada[providence]["population"])

print(sum)

【讨论】:

    【解决方案2】:

    您创建的不是dictionary,而是set(没有keys

    要创建字典,您需要keys like

    canada = {1:ontario, 2:quebec, 3:nova_scotia, 4:new_brunswick, 5:manitoba}
    
    canada = {"Ontario":ontario, "Quebec":quebec, "Nova Scotia":nova_scotia, "New Brunswick":new_brunswick, "Manitoba":manitoba}
    

    然后你可以使用canada.items() 和总人口

    (我使用变量total,因为有函数sum()

    # --- before `for`-loop ---
    
    total = 0
    
    # --- `for`-loop ---
    
    for key, value in canada.items():
        total += value['population']
    
    # --- after `for`-loop ---
    
    print(total)
    

    或更短

    total = sum(value['population'] for value in canada.values())
    

    然后你可以添加到这个字典中

    canada['total'] = total
    

    完整代码:

    ontario = dict(capital="Toronto", largest="Toronto", population=14826276)
    quebec = dict(capital="Quebec City", largest="Montreal", population=8604495)
    nova_scotia = dict(capital="Halifax", largest='Halifax', population=992055)
    new_brunswick = dict(capital="Fredricton", largest='Moncton', population=789225)
    manitoba = dict(capital="Winnipeg", largest="Winnipeg", population=1383765)
    
    canada = {1:ontario, 2:quebec, 3:nova_scotia, 4:new_brunswick, 5:manitoba}#, british_columbia, prince_edward_island, saskatchewan, alberta, newfoundland_and_labrador
    
    total = 0
    for key, value in canada.items():
        total += value['population']
    print(total)
    
    #total = sum(value['population'] for value in canada.values())
    
    canada['total'] = total
    
    print(canada)
    

    【讨论】:

      【解决方案3】:

      试试这个。

      
      ontario = dict(capital="Toronto", largest="Toronto", population=14826276)
      quebec = dict(capital="Quebec City", largest="Montreal", population=8604495)
      nova_Scotia = dict(capital="Halifax", largest='Halifax', population=992055)
      new_Brunswick = dict(capital="Fredricton", largest='Moncton', population=789225)
      manitoba = dict(capital="Winnipeg", largest="Winnipeg", population=1383765)
      
      canada_list = [ontario, quebec, nova_Scotia, new_Brunswick, manitoba]
      total = 0
      for item in canada_list:
          # Adding all values of population to receive total population of canada
          total += item.get('population', 0)
      
      print("Total: {}".format(total))
      
      

      输出:

      Total: 26595816
      

      【讨论】:

        猜你喜欢
        • 2018-04-25
        • 1970-01-01
        • 2021-11-23
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 2013-09-20
        • 1970-01-01
        相关资源
        最近更新 更多