【问题标题】:Concise way to represent a list of dictionaries containing the same keys表示包含相同键的字典列表的简洁方法
【发布时间】:2022-01-13 04:35:21
【问题描述】:

我有一个包含相同键但不同值的字典列表。键"A" 的值存储在一个名为animals_k 的变量中。鉴于此,我想知道是否有更简洁的方式来表示以下内容:

animals_k = ['tiger', 'elephant', 'cow', 'goat']
animal_class = [{"A":"tiger", "B": 0, "C":20, "D":4},
                {"A":"elephant", "B": 60, "C":8, "D":9},
                {"A":"cow", "B": 0, "C":34, "D":12},
                {"A":"goat", "B": 43, "C":43, "D":44}]

【问题讨论】:

  • 很抱歉,您的要求不是很清楚。 “简洁”是什么意思?
  • 一种更动态的方法,不涉及重复键
  • 再说一次,你的意思不是很清楚。你的意思是字面意思是你必须输入什么作为源代码
  • 你能计算出给定动物的“B”、“C”和“D”的值吗?
  • @giucal 否,这些值可能会发生变化;考虑到动物,它们不是计算出来的

标签: python list dictionary key key-value


【解决方案1】:
{
    "tiger": {
        "B": 60,
        "C": 0,
    },
    "dog": {
        "B": 100,
        "C": 12
    }
}

【讨论】:

    【解决方案2】:

    您可以创建一个字典,其中包含每个键的值列表。

    {
        "A": ["tiger", "elephant", ...],
        "B": [0, 60, ...],
        ...
    }
    

    【讨论】:

      【解决方案3】:

      您使用generator expressionlist comprehension 编写代码创建列表:

      animals_k = ['tiger', 'elephant', 'cow', 'goat']
      animals_v = [(0,  20, 4), (60, 8,  9), (0,  34, 12), (43, 43, 44)]
      
      temp = (dict(zip(('B','C','D'), values)) for values in animals_v)
      animal_classes = [dict(**d1, **d2)
                          for d1, d2 in zip(({'A':animal} for animal in animals_k), temp)]
      
      from pprint import pprint
      pprint(animal_classes, sort_dicts=False)
      

      结果:

      [{'A': 'tiger', 'B': 0, 'C': 20, 'D': 4},
       {'A': 'elephant', 'B': 60, 'C': 8, 'D': 9},
       {'A': 'cow', 'B': 0, 'C': 34, 'D': 12},
       {'A': 'goat', 'B': 43, 'C': 43, 'D': 44}]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多