Python:如何在字典中转换这些列表?

Python:如何在字典中转换这些列表?,python,list,dictionary,Python,List,Dictionary,我有一点创造性的Python问题。我想不出一个优雅而可取的短方法来写这篇文章 我有4个列表,其中3个有1个元素,第4个可能有更多(也可能是一个) 我需要一个脚本,将这4个列表转换为一系列特定的格式化字典。我将举几个例子说明我想做什么 例如: W=['spaghetti'] X=['banana'] Y=['tomato'] Z=['lemonade', 'milk'] 我需要这个: dict1 = {'fruit':'banana' , 'food':'spaghetti' , 'vegeta

我有一点创造性的Python问题。我想不出一个优雅而可取的短方法来写这篇文章

我有4个列表,其中3个有1个元素,第4个可能有更多(也可能是一个)

我需要一个脚本,将这4个列表转换为一系列特定的格式化字典。我将举几个例子说明我想做什么

例如:

W=['spaghetti']
X=['banana']
Y=['tomato']
Z=['lemonade', 'milk']
我需要这个:

dict1 = {'fruit':'banana' , 'food':'spaghetti' , 'vegetable':'tomato' , 'drink':'lemonade'}
dict2 = {'fruit':'banana' , 'food':'spaghetti' , 'vegetable':'tomato' , 'drink':'milk'}
但也可以是3个或更多元素:

W=['spaghetti']
X=['banana']
Y=['tomato']
Z=['lemonade', 'milk', 'water']
对于这些,结果应为:

 dict1 = {'fruit':'banana' , 'food':'spaghetti' , 'vegetable':'tomato' , 'drink':'lemonade'}
 dict2 = {'fruit':'banana' , 'food':'spaghetti' , 'vegetable':'tomato' , 'drink':'milk'}
 dict3 = {'fruit':'banana' , 'food':'spaghetti' , 'vegetable':'tomato' , 'drink':'water'}
此外,Z以外的另一个列表可以是多个元素列表:

W=['spaghetti']
X=['banana', 'apple']
Y=['tomato']
Z=['lemonade']
在这种情况下,我需要:

dict1 = {'fruit':'banana' , 'food':'spaghetti' , 'vegetable':'tomato' , 'drink':'lemonade'}
dict2 = {'fruit':'apple' , 'food':'spaghetti' , 'vegetable':'tomato' , 'drink':'lemonade'}
所以基本上:

  • 鉴于:
    • 3个单元素列表
    • 1 n元素列表
  • 结果:
    • n个有4个键值对的词汇表:每个列表中有1个键值对
    • 对应于1元素列表的键的相同dict值
    • 对应于n元素列表的键的不同dict值

一般来说,您将从列表中选择一个,并根据每个结果制作一个字典。由于您事先不知道会有多少个结果,因此不能只分配给
dict1
dict2
等。(此外,从你使用的名字来看,这显然是一个愚蠢的想法。毕竟,你没有写
Z1='lemonade'
Z2='milk'
等等。仔细想想为什么不写。)相反,我们将列出这些结果

因此,我们需要一个
列表
,其中包括(一些
dict
,可以用
元组
表示),对于我们通过笛卡尔积得到的每个
元组
。幸运的是,“采用笛卡尔积”内置于标准库中,它允许我们编写一个表达式(不计算导入;))这正是它所说的(本段第一句):


此方法允许任何源列表包含多个元素(或不包含任何元素;),而无需进行必要的修改。

您自己尝试过什么吗?使用此方法,我得到以下结果,它似乎混淆了。。怎么了?[{‘食物’:‘香蕉’,‘蔬菜’:‘西红柿’,‘水果’:‘意大利面’,‘饮料’:‘柠檬水’,{‘食物’:‘香蕉’,‘蔬菜’:‘西红柿’,‘水果’:‘意大利面’,‘饮料’:‘牛奶’}]我如上所述定义了W,X,Y,Z……我明白了,为了让它起作用,W必须等于水果,X等于美食家,使用比
W,X,Y更具描述性的名称,Z
无论如何可能是个好主意;)好极了,卡尔!!我觉得Python可以很容易地做到这一点,但不知道如何做到。我之所以对V、X、Y、Z使用列表,是因为我不知道这4个类别中哪一个会有多个值。因此,列出一份清单似乎是个好主意仔细想想为什么不“我怎样才能做得更好?”?总是渴望得到。。。顺便说一句,这只是一个简单的例子;我不想使用实际的数据类型使问题复杂化。非常感谢!!!您应该使用列表来存储当前所称的
W
等内容。重点是,由于您已经理解的相同原因,您还应该使用列表来存储输出结果(而不是
dict1
dict2
等)。
from itertools import product
# define W, X, Y, Z...
menus = [
    {'fruit': fruit, 'food': food, 'vegetable': vegetable, 'drink': drink}
    for fruit, food, vegetable, drink in product(W, X, Y, Z)
]