python - 使用条件语句编译嵌套列表
问题描述
我想使用以下一个或多个元组列表创建一个嵌套列表,列表的顺序基于用户的偏好。
Fruits=[("Apples",2),("Oranges",3),("Pineapples",5)]
Clothes=[("Jeans",10),("Shirts",5),("Dresses",15)]
Pets=[("Dogs",3),("Cats",4),("Turtles",2)]
嵌套列表的顺序将取决于用户的偏好。例如,如果用户更喜欢宠物而不是衣服而不是水果。该列表将如下所示:
[[("Jeans",10),("Shirts",5),("Dresses",15)],[("Jeans",10),("Shirts",5),
("Dresses",15)],[("Apples",2),("Oranges",3),("Pineapples",5)]]
用户还可以选择只选择一项或两项。例如,如果用户只关心宠物然后关心衣服(不关心水果),他/她的列表将如下所示。
[[("Dogs",3),("Cats",4),("Turtles",2)],[("Jeans",10),("Shirts",5),
("Dresses",15)]]
用户输入是一个按顺序排列的首选项列表。例如:
preference= ["Pets", "Fruits", "Clothing"] # preference list for users who care about pets over fruits over clothing.
or
preference= ["Fruits", "Clothing"] # preference list for users who care about fruits over clothing (no regard for pets)
这就是我试图解决这个问题的方式。首先,我创建一个空列表,其中包含相应数量的嵌套列表:
empty_list=[[] for x in range (len(preferences)]
这将为我需要的嵌套列表的数量创建一个占位符。然后我运行一堆条件语句来弹出一个列表:
if preference[0]=="Fruits":
empty_list[0]=Fruits
if preference[1]=="Clothes":
empty_list[1]=Clothes
empty_list[2]=Pets
elif preference[1]=="Pets":
empty_list[1]=Pets
empty_list[2]=Clothes
if preference[0]=="Pets":
empty_list[0]=Pets
if preference[1]=="Clothes":
empty_list[1]=Clothes
empty_list[2]=Fruits
elif preference[1]=="Fruits":
empty_list[1]=Fruits
empty_list[2]=Clothes
if preference[0]=="Clothes":
empty_list[0]=Clothes
if preference[1]=="Pets":
empty_list[1]=Pets
empty_list[2]=Fruits
elif preference[1]=="Fruits":
empty_list[1]=Fruits
empty_list[2]=Pets
如果只有两个首选项而不是三个首选项,我的解决方案效率低下,并且还会导致列表分配超出范围的问题。有没有更 Pythonic 的方式来写这个?
非常感谢任何提示或指导。
解决方案
您应该将数据存储在字典中
然后按键访问该字典
data = dict(
Fruits=[("Apples",2),("Oranges",3),("Pineapples",5)]
Clothes=[("Jeans",10),("Shirts",5),("Dresses",15)]
Pets=[("Dogs",3),("Cats",4),("Turtles",2)]
)
一旦你把它放在一个字典里,你就可以很容易地用变量访问值
fruits = "Fruits"
my_fruits = data[fruits]
然后,您可以使用简单的列表推导来捕获您的所有兴趣
interests = ["Fruits","Pets"]
interesting_things = [data[interest] for interest in interests]
interests = ["Fruits","Clothes"]
interesting_things = [data[interest] for interest in interests]
推荐阅读
- android - 如何在同一屏幕中添加两个模态抽屉?
- laravel - 找不到类 'Doctrine\DBAL\Driver\PDOMySql\Driver'
- algorithm - 比较两棵 Merkle 树的时间复杂度是多少?
- mongodb - 更改 Kakfa Streams 的状态存储以使用 MongoDB
- html - 对齐与 CSS
- c++ - 使用 TCP 套接字时无法接收任何包
- javascript - 试图获得累积的垂直滚动距离
- java - 如何在片段的警报对话框中使用recycleview
- python - 验证请求中多个字段的最佳方法
- php - ReactJS/PHP 应用程序 - 表单不工作