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

2024-04-27 03:00:10 发布

您现在位置: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元素列表
  • 结果:
    • 包含4个键值对的词典:每个列表中有1个键值对
    • 与1元素列表对应的键的dict值相同
    • n元素列表对应键的dict值不同

Tags: 元素apple列表foodbananadrinkfruitwater
1条回答
网友
1楼 · 发布于 2024-04-27 03:00:10

一般来说,您将获取列表的Cartesian product,并根据每个结果生成一个字典。因为你不知道提前会有多少个结果,你不能只分配给dict1dict2等(此外,从你使用的名字来看,这显然是一个愚蠢的想法)。毕竟,你没有写Z1 = 'lemonade'Z2 = 'milk'等等。仔细想想为什么不写。)相反,我们将对这些结果进行list。你知道吗

所以我们想要一个list由(一些dict组成,可以用tuple来表示),对于每个tuple,我们通过笛卡尔积得到。幸运的是,“taking the Cartesian product”内置于标准库中,它允许我们编写一个表达式(不包括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)
]

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

相关问题 更多 >