【问题标题】:Create a list of Dictionaries iterating over list of input values创建一个迭代输入值列表的字典列表
【发布时间】:2021-07-20 18:43:26
【问题描述】:

我正在尝试根据单独的输入列表创建字典列表。

示例: 输入

appetizer = ['soup', 'salad']
entree = ['steak', 'chicken', fish']
dessert = ['ice cream', 'flan', cake']

dict = {appetizer = [], entree = [], dessert = []}

dinner_options = []

从这里,我想创建一个包含所有可能的晚餐选项的字典列表

输出

dinner_options = [{appetizer = 'soup', entree = 'steak', dessert = 'ice cream'},
                  {appetizer = 'soup', entree = 'steak', dessert = 'flan'},
                  {appetizer = 'soup', entree = 'steak', dessert = 'cake'},
                  {appetizer = 'soup', entree = 'chicken', dessert = 'ice cream'},
                  {appetizer = 'soup', entree = 'chicken', dessert = 'flan'},
                  {appetizer = 'soup', entree = 'chicken', dessert = 'cake'},
                  {appetizer = 'soup', entree = 'fish', dessert = 'ice cream'},
                  {appetizer = 'soup', entree = 'fish', dessert = 'flan'},
                  {appetizer = 'soup', entree = 'fish', dessert = 'cake'},
                  {appetizer = 'salad', entree = 'steak', dessert = 'ice cream'},
                  {appetizer = 'salad', entree = 'steak', dessert = 'flan'},
                  {appetizer = 'salad', entree = 'steak', dessert = 'cake'},
                  {appetizer = 'salad', entree = 'chicken', dessert = 'ice cream'},
                  {appetizer = 'salad', entree = 'chicken', dessert = 'flan'},
                  {appetizer = 'salad', entree = 'chicken', dessert = 'cake'},
                  {appetizer = 'salad', entree = 'fish', dessert = 'ice cream'},
                  {appetizer = 'salad', entree = 'fish', dessert = 'flan'},
                  {appetizer = 'salad', entree = 'fish', dessert = 'cake'}]

基本上,最后我试图获得一个列表,其中包含输入中提供的列表(参数)的所有排列。

【问题讨论】:

  • 你的输入数组总是3还是可以改变?

标签: python list dictionary while-loop nested-loops


【解决方案1】:

您只需要遍历您的列表并将可能性附加到您的 dinner_options 数组。

appetizer = ['soup', 'salad']
entree = ['steak', 'chicken', 'fish']
dessert = ['ice cream', 'flan', 'cake']

dinner_options = []

for ap in appetizer:
    for en in entree:
        for de in dessert:
            dinner_options.append({ "appetizer": ap, "entree": en, "dessert": de })

print(dinner_options)

然后它应该显示

[{'appetizer': 'soup', 'entree': 'steak', 'dessert': 'ice cream'}, {'appetizer': 'soup', 'entree': 'steak', 'dessert': 'flan'}, {'appetizer': 'soup', 'entree': 'steak', 'dessert': 'cake'}, {'appetizer': 'soup', 'entree': 'chicken', 'dessert': 'ice cream'}, {'appetizer': 'soup', 'entree': 'chicken', 'dessert': 'flan'}, {'appetizer': 'soup', 'entree': 'chicken', 'dessert': 'cake'}, {'appetizer': 'soup', 'entree': 'fish', 'dessert': 'ice cream'}, {'appetizer': 'soup', 'entree': 'fish', 'dessert': 'flan'}, {'appetizer': 'soup', 'entree': 'fish', 'dessert': 'cake'}, {'appetizer': 'salad', 'entree': 'steak', 'dessert': 'ice cream'}, {'appetizer': 'salad', 'entree': 'steak', 'dessert': 'flan'}, {'appetizer': 'salad', 'entree': 'steak', 'dessert': 'cake'}, {'appetizer': 'salad', 'entree': 'chicken', 'dessert': 'ice cream'}, {'appetizer': 'salad', 'entree': 'chicken', 'dessert': 'flan'}, {'appetizer': 'salad', 'entree': 'chicken', 'dessert': 'cake'}, {'appetizer': 'salad', 'entree': 'fish', 'dessert': 'ice cream'}, {'appetizer': 'salad', 'entree': 'fish', 'dessert': 'flan'}, {'appetizer': 'salad', 'entree': 'fish', 'dessert': 'cake'}]

【讨论】:

    【解决方案2】:

    你可以使用itertools.product:

    from itertools import product
    
    appetizer = ['soup', 'salad']
    entree = ['steak', 'chicken', 'fish']
    dessert = ['ice cream', 'flan', 'cake']
    
    # Here we create an iterable from the objects we want to obtain
    # different combinations.
    to_combine = (appetizer, entree, dessert)
    
    # Next, we need to define the order in which those appear
    # as those will be used as the keys in the individual
    # dictionary objects.
    order = 'appetizer,entree,dessert'.split(',')
    dinner_options = list()
    
    # Now we loop over the unpacked tuple and build each individual
    # dictionary.
    for items in product(*to_combine):
        # This creates the individual objects which are of the form:
        # `{'appetizer': '<a>', 'entree': '<e>', 'dessert': '<d>'}
        d = {key:value for key, value in zip(order, items)}
        dinner_options.append(d)
    

    这会产生所需的输出。

    【讨论】:

      【解决方案3】:

      我认为这是最明显也是最耗时的答案

      appetizer = ['soup', 'salad']
      entree = ['steak', 'chicken', 'fish']
      dessert = ['ice cream', 'flan', 'cake']
      
      # dict = {appetizer = [], entree = [], dessert = []}
      
      dinner_options = []
      
      for start in appetizer:
          for mid in entree:
              for end in dessert:
                  data = dict(appetizer=start, entree=mid, dessert=end)
                  dinner_options.append(data)
      
      print(dinner_options)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-28
        • 2021-09-22
        • 2017-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-31
        相关资源
        最近更新 更多