【问题标题】:How to create an empty list of dictionaries and populate afterwords?如何创建一个空的字典列表并填充后记?
【发布时间】:2020-05-20 03:07:57
【问题描述】:

我需要初始化一个空的 Dictionary(LOD) 列表,其中必须包含以下键。 "id","name","age", "gender"。我想创建一个开始填充 LOD 的循环/嵌套循环。为了填充,我有一个包含 ID 的列表,其余的键是使用 random 函数生成的。 ID 列表如下所示:id = ['1','2','3']

结果必须看起来像这样。

LOD = [
      {  
          'id': '1',
          'name':'122121',
          'age':'2131',
          'gender':'121' 

       },
       {  
          'id': '2',
          'name':'122121',
          'age':'2131',
          'gender':'121' 

       },
{  
          'id': '3',
          'name':'122121',
          'age':'2131',
          'gender':'121' 

       },
       ]

【问题讨论】:

    标签: python list dictionary random


    【解决方案1】:

    您可以为此使用字典理解:

    ids = ['1','2','3']
    
    LOD = [
          {  
              'id': i,
              'name':'122121',
              'age':'2131',
              'gender':'121' 
    
           } for i in ids
           ]
    

    输出:

    >>> LOD
    [{'id': '1', 'name': '122121', 'age': '2131', 'gender': '121'},
     {'id': '2', 'name': '122121', 'age': '2131', 'gender': '121'},
     {'id': '3', 'name': '122121', 'age': '2131', 'gender': '121'}]
    

    或者,使用随机模块:

    import random
    
    ids = ['1','2','3']
    
    LOD = [
          {  
              'id': i,
              'name': str(random.randint(100000, 999999)),
              'age': str(random.randint(1000, 9999)),
              'gender': str(random.randint(100, 999)) 
           } for i in ids
           ]
    

    输出:

    >>> LOD
    [{'id': '1', 'name': '727325', 'age': '5367', 'gender': '238'},
     {'id': '2', 'name': '316019', 'age': '8963', 'gender': '702'},
     {'id': '3', 'name': '464023', 'age': '4324', 'gender': '155'}]
    

    请注意,您不应使用 id 作为变量名,因为它会影响内置的 python id 对象。

    【讨论】:

      【解决方案2】:

      您可以通过在列表推导中初始化 dict 对象来做到这一点

      keys = ['id', 'name', 'age', 'gender']
      ids = ['1', '2', '3']
      LOD = [dict((key, i if key == 'id' else random.randint(1, 100)) for key in keys) for i in ids]
      
      print(LOD)
      '''
      [{'id': '1', 'name': 34, 'age': 10, 'gender': 57},
      {'id': '2', 'name': 64, 'age': 13, 'gender': 21},
      {'id': '3', 'name': 11, 'age': 17, 'gender': 2}]
      '''
      

      【讨论】:

        【解决方案3】:

        CJDB 已经可以满足您的需求。但如果您可能更喜欢另一种方法:

        ids = ['1','2','3']
        keys = ["name","age", "gender"]
        LOD = []
        

        然后用字典填充您的列表

        for i in ids:
            your_dictionary = {"id": i}
            for key in keys:
                your_dictionary[key] = '{}_rnd_function_output'.format(key)
            LOD.append(your_dictionary)
        

        输出将是

        >>> LOD
        
        [{'id': '1',
          'name': 'name_rnd_function_output',
          'age': 'age_rnd_function_output',
          'gender': 'gender_rnd_function_output'},
         {'id': '2',
          'name': 'name_rnd_function_output',
          'age': 'age_rnd_function_output',
          'gender': 'gender_rnd_function_output'},
          {'id': '3',
           'name': 'name_rnd_function_output',
           'age': 'age_rnd_function_output',
           'gender': 'gender_rnd_function_output'}
        ]
        

        您可以考虑在字典中包含子字典。您的 id 将是主字典的键,而子字典将是值。

        LOD = {}
        for i in ids:
            LOD[i] = {}
            for key in keys:
                LOD[i][key] = '{}_rnd_function_output'.format(key)
        

        还有输出

        >>> LOD
        {'1': {'name': 'name_rnd_function_output',
               'age': 'age_rnd_function_output',
               'gender': 'gender_rnd_function_output'},
         '2': {'name': 'name_rnd_function_output',
               'age': 'age_rnd_function_output',
               'gender': 'gender_rnd_function_output'},
         '3': {'name': 'name_rnd_function_output',
               'age': 'age_rnd_function_output',
               'gender': 'gender_rnd_function_output'}}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-03
          • 2018-08-06
          • 1970-01-01
          • 2012-11-26
          • 1970-01-01
          • 1970-01-01
          • 2023-02-21
          相关资源
          最近更新 更多