【问题标题】:Python - printing list of dictionaries matching the values from a listPython - 打印与列表中的值匹配的字典列表
【发布时间】:2022-08-19 00:53:11
【问题描述】:

我有一个清单,

arr = [\"rajab\", \"vedanth\", \"chinmay\", \"vignesh\"]

和一本字典,

elements = [
        { \'name\': \'vedanth\',   \'age\': 17, \'time_hours\': 1},
        { \'name\': \'rajab\', \'age\': 12,  \'time_hours\': 3},
        { \'name\': \'vignesh\',  \'age\': 21,  \'time_hours\': 2.5},
        { \'name\': \'chinmay\',  \'age\': 24,  \'time_hours\': 1.5},
    ]

我想根据列表中的值打印字典中的元素..

Output:
elements = [       
        { \'name\': \'rajab\', \'age\': 12,  \'time_hours\': 3},
       { \'name\': \'vedanth\',   \'age\': 17, \'time_hours\': 1},
        { \'name\': \'chinmay\',  \'age\': 24,  \'time_hours\': 1.5},
        { \'name\': \'vignesh\',  \'age\': 21,  \'time_hours\': 2.5}
    ]

如何通过避免许多 for 循环来做到这一点?

    标签: python


    【解决方案1】:

    您的意思是sorting,这里基于arr 列表中名称的索引

    arr = ["rajab", "vedanth", "chinmay", "vignesh"]
    
    elements = [
        {'name': 'vedanth', 'age': 17, 'time_hours': 1},
        {'name': 'rajab', 'age': 12, 'time_hours': 3},
        {'name': 'vignesh', 'age': 21, 'time_hours': 2.5},
        {'name': 'chinmay', 'age': 24, 'time_hours': 1.5},
    ]
    
    elements.sort(key=lambda item: arr.index(item['name']))
    
    print(elements)
    

    【讨论】:

      【解决方案2】:

      我会首先构造一个将名称映射到字典的字典,然后使用它:

      arr = ["rajab", "vedanth", "chinmay", "vignesh"]
      elements = [{ 'name': 'vedanth',  'age': 17, 'time_hours': 1},
                  { 'name': 'rajab', 'age': 12, 'time_hours': 3},
                  { 'name': 'vignesh', 'age': 21, 'time_hours': 2.5},
                  { 'name': 'chinmay', 'age': 24, 'time_hours': 1.5}]
      
      name_to_dict = {dct['name']: dct for dct in elements}
      
      output = [name_to_dict[name] for name in arr]
      print(output)
      # [{'name': 'rajab', 'age': 12, 'time_hours': 3},
      #  {'name': 'vedanth', 'age': 17, 'time_hours': 1},
      #  {'name': 'chinmay', 'age': 24, 'time_hours': 1.5},
      #  {'name': 'vignesh', 'age': 21, 'time_hours': 2.5}]
      

      【讨论】:

        【解决方案3】:
        newElements = [x for x in elements for y in arr if y == x['name']]
        

        【讨论】:

          猜你喜欢
          • 2013-02-16
          • 2010-12-01
          • 1970-01-01
          • 2015-10-03
          • 1970-01-01
          • 2015-07-03
          • 1970-01-01
          • 1970-01-01
          • 2022-10-14
          相关资源
          最近更新 更多