我正在学习python,我看到了单行python表达式,但我并不是真的理解它。有人可以帮我解释代码吗?或者在传统的for循环中扩展代码?更具体地说,{fruit:
是什么意思?
return {fruit: basket.count(fruit) for fruit in set(basket)}
谢谢!
答案 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