Python:如何将这些列表转换成字典?

可丽卡

我有一些创造性的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个元素列表
    • 1个n元素清单
  • 结果:
    • n个字典,具有4个键-值对:每个列表形成1个键-值对
    • 与1元素列表对应的键的dict值相同
    • 与n元素列表对应的键的不同dict值
卡尔·克内希特尔

通常,您将获取列表笛卡尔积,并根据每个结果制作一个字典。由于您不提前知道会有多少结果,因此您不能仅将其分配给dict1dict2等等。(此外,从所使用的名称来看,这显然已经是一个愚蠢的主意。毕竟,您可以没有写Z1 = 'lemonade'Z2 = 'milk'等等。请仔细考虑为什么不这样做。)相反,我们将list得出这些结果。

因此,对于我们通过采用笛卡尔乘积得到的每一个,我们都想要一个list由组成的(dict可以用a表示tupletuple幸运的是,“采用笛卡尔积”是内置于标准库中的,它使我们可以编写一个表达式(不计算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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章