python中这一行表达式的解释

时间:2017-09-06 03:46:23

标签: python python-3.x

我正在学习python,我看到了单行python表达式,但我并不是真的理解它。有人可以帮我解释代码吗?或者在传统的for循环中扩展代码?更具体地说,{fruit:是什么意思?

return {fruit: basket.count(fruit) for fruit in set(basket)}

谢谢!

5 个答案:

答案 0 :(得分:2)

代码会创建一个字典,告诉您篮子里每个水果的数量。

也许我可以通过分解来更容易理解。下面的代码相当于你的单行代码:

basket = ["apple", "apple", "pear", "banana"]

# a set is an unsorted list of unique items
uniqueFruits = set(basket)

# initialise empty dict
counts = {}

# loop through every unique fruit
for fruit in uniqueFruits:

    # how often does it come up in the basket?
    occurrences = basket.count(fruit)

    # put that number into the dict with the fruit name as value
    counts[fruit] = occurrences

现在,对象counts包含与您的语句返回的字典相同的字典。在我们的例子中:

{'pear': 1, 'banana': 1, 'apple': 2}

答案 1 :(得分:1)

你所拥有的是一种理解。它在单个语句中从iterable构建字典。它们是在pep-0274中引入的。

因此,对于iterable中的每个元素,我们创建一个dict条目。以水果为关键,以及在列表中出现的次数作为值。

这是一个例子。我假设了变量basket的内容。

basket = ['banana', 'apple', 'orange', 'cherry', 'orange', 'banana', 'orange', 'orange']

print( {fruit: basket.count(fruit) for fruit in set(basket)})

# or expanded as regular loop
d = {}
for fruit in set(basket):
    d[fruit] = basket.count(fruit)

print(d)

count方法效率不高,尤其是当与集合本身的另一个循环结合使用时。更有效的方法是使用defaultdict

from collections import defaultdict

dd = defaultdict(int)

for fruit in basket:
    dd[fruit] += 1

print(dd)

现在你完全迭代了这个集合。而不是一次创建一个集合,一次在集合本身上,一次在列表中为集合中的每个项目。

答案 2 :(得分:1)

此表达式称为dict理解(实质上是一个创建字典的单行表达式)。

在Python中,dict看起来像这样:

dictionary = {"key": "value", "anotherkey": ["some", "other", "value"]}

:的右侧是键(通常是字符串),而:的左侧是分配给键的值。

您可以使用字典从键中获取值,如下所示:

dictionary["key"]
>> "value"

因此,dict理解使用类似于您示例中的表达式构建字典。

如果你有basket

basket = ["apple", "apple", "banana"]
set(basket)  # set() returns a set of unique items from basket.
>> {"apple", "banana"} 
basket.count("apple")  # list.count(x) returns the number of times x occurs in list.
>> 2

此:

dictionary = {}
for fruit in set(basket):
    dictionary[fruit] = basket.count(fruit)
return dictionary

与此相同:

return {fruit: basket.count(fruit) for fruit in set(basket)}
#      {^key : ^value}  is added   for each item in set(basket)           

他们都回来了:

{"apple": 2, "banana": 1}

答案 3 :(得分:0)

baset列表中形成字典是一种字典理解,它使得水果名称成为关键,水果的数量就是该值。 for循环可以是:

basket = ['banana', 'banana', 'apple', 'banana', 'orange', 'apple']
d = {}
for fruit in set(basket):
    d[fruit] = basket.count(fruit)

# d = {'banana': 3, 'apple': 2, 'orange': 1}

x = {fruit: basket.count(fruit) for fruit in set(basket)}

# x = {'banana': 3, 'apple': 2, 'orange': 1}

答案 4 :(得分:0)

等同于:

temp_dict = {}
for fruit in set(basket):
    temp_dict[fruit] = basket.count(fruit)
return temp_dict