2011-01-28 38 views
-2

我是新来的Python,并且正在努力理解列表解析,所以我可以在我的代码中使用它。编制列表理解,初学者

pricelist = {"jacket":15, "pants":10, "cap":5, "baseball":3, "gum":1} 

products_sold = [] 

while True: 
    product_name = input("what is the name of the product") 
    product = {} 
    customer_name = input("what is the name of the customer") 
    #customer is shopping 
    product[sell_price] = pricelist[product_name] 
    product["quantity"] = input("how many items were sold?") 
    #append the product to a dict 

    products_sold.append(product) 

现在我想对整个交易的字典看起来应该像这样的:

transaction = {"customer_name":"name", 
       "sold":{"jacket":3, "pants":2}, 
       "bought":{"cap":4, "baseball":2, "gum":"10"}} 

我将如何创建一个字典,并用列表理解为它分配键和值?我已经看过例子,并且我理解它们,但我无法弄清楚如何将它们应用于我的代码。

我的意图是将我的产品列表变成一个以不同方式包含相同信息的字典(交易)列表。

+0

产品是字典吗? `products_sold`最终是一个列表,每个列表中有1个条目? – mikej 2011-01-28 15:47:10

回答

2

我会回答我认为你真正的问题是你想了解列表解析。国际海事组织,你发布的例子,试图学习列表解析不是一个好例子。这是一个我喜欢使用的非常简单的示例,因为应该很容易将它与您从另一种语言中已知的内容联系起来。

# start with a list of numbers 
numbers = [1, 2, 3, 4, 5] 

# create an empty list to hold the new numbers 
numbers_times_two = [] 

# iterate over the list and append the new list the number times two 
for number in numbers: 
    numbers_times_two.append(number * 2) 

希望上面的代码有意义且对您来说很熟悉。下面是使用列表解析的完全相同的东西。注意,所有相同的部件都在那里,只是稍微移动一下。

numbers_times_two = [number * 2 for number in numbers] 

列表解析使用方括号就像一个列表,并将其从创建遍历一个可迭代(列表类似的东西)一个新的列表,它是在这个例子中的数字。

所以,你可以看到,当你问一个关于使用列表理解来填充字典的问题时,在学习列表解析的机制的上下文中它确实没有意义。

希望这会有所帮助。