我有一些创造性的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'}
所以基本上:
通常,您将获取列表的笛卡尔积,并根据每个结果制作一个字典。由于您不提前知道会有多少结果,因此您不能仅将其分配给dict1
,dict2
等等。(此外,从所使用的名称来看,这显然已经是一个愚蠢的主意。毕竟,您可以没有写Z1 = 'lemonade'
;Z2 = 'milk'
等等。请仔细考虑为什么不这样做。)相反,我们将list
得出这些结果。
因此,对于我们通过采用笛卡尔乘积得到的每一个,我们都想要一个list
由组成的(dict
可以用a表示tuple
)tuple
。幸运的是,“采用笛卡尔积”是内置于标准库中的,它使我们可以编写一个表达式(不计算import;)),该表达式恰好表示其含义(本段的第一句话):
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)
]
这种方法允许任何源列表都包含多个元素(或不包含任何元素;)),而无需进行必要的修改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句