【问题标题】:How can i merge several dictionaries by a for loop?如何通过 for 循环合并多个字典?
【发布时间】:2020-07-22 09:04:50
【问题描述】:

这是我的代码:

a = int(input())

for i in range(a):
    b = input()
    
    b = b.split(".")#creating a list

    #print(b)
    
    b[1]= b[1].lower()
    b[1]=b[1].capitalize()
    a=b[1]
    #print(b[1])
    
    #print(b[0] , b [1] , b[2])

    dic = {}
    dic_final={}
    dic={b[1] : {'name':b[0] ,'lan':b[2] }}
    dic_final.update(dic)
    del(dic)


print(dic_final) 

我的意见:

2 
f.sara.python
m.john.java

输出必须是这样的:

{ 'sara':{'gender':'f' , 'lan':'python'} , 'john':{'gender':'m' , 'lan':'python'}}

但我总是得到我在输入中写的最后一个字典项:

{'john':{'gender':'m' , 'lan':'python'}

我怎样才能解决它并获得如下的字典?

{ 'sara':{'gender':'f' , 'lan':'python'} , 'john':{'gender':'m' , 'lan':'python'}}

【问题讨论】:

    标签: python python-3.x dictionary nested


    【解决方案1】:

    这是我想出的一个非常清晰的解决方案

        num_sample = int(input("how many test cases?: "))
        final = {}
        for case in range(num_sample):
            new_case = input("insert new case: ")
            gender, name, lan = new_case.split(".")
            info = {"gender": gender, "lan": lan}
            final[name] = info
    
        #access final from here
    

    【讨论】:

      【解决方案2】:

      创建一个全局字典而不是在 for 循环中创建一个本地字典。此外,在您的代码中,您将 gender 命名为 name

      a = int(input())
      
      dic_final = {}
      
      for i in range(a):
          b = input()
          
          b = b.split(".")
          
          b[1]= b[1].lower()
          b[1]=b[1].capitalize()
          a=b[1]
      
          dic={b[1] : {'gender':b[0] ,'lan':b[2] }}
          dic_final.update(dic)
          del(dic)
      
      
      print(dic_final) 
      

      输出:

      2
      f.sara.python
      m.john.java
      {'Sara': {'gender': 'f', 'lan': 'python'}, 'John': {'gender': 'm', 'lan': 'java'}}
      

      【讨论】:

        【解决方案3】:

        您只获得最后一个条目的原因是,您正在为每次迭代重新初始化字典。

        你所要做的就是,将“dic_final”设为全局。

        【讨论】:

          【解决方案4】:

          您每次都在 for 循环中覆盖 dic_final 字典。 此行导致问题dic_final={}

          解决方案: 在你的'for循环'之前添加这一行并删除里面的声明。 dic_final = dict()

          更好的编码风格:

          a = int(input())
          
          dic_final = dict()
          
          for i in range(a):
              b = input()
              
              gender, name, lan = b.split(".")
          
              name = name.capitalize()
              dic_final.update({name : {"gender": gender, "lan": lan}})
          
          print(dic_final)
          

          输出:

          2
          f.sara.python
          m.john.java
          {'Sara': {'gender': 'f', 'lan': 'python'}, 'John': {'gender': 'm', 'lan': 'java'}}
          

          【讨论】:

            猜你喜欢
            • 2020-11-30
            • 2018-12-01
            • 1970-01-01
            • 2020-02-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-03
            • 2022-11-25
            相关资源
            最近更新 更多