python字典理解迭代器

python字典理解迭代器,python,dictionary,iteration,Python,Dictionary,Iteration,嘿,我对我编写的以下python代码有疑问: #create a list of elements #use a dictionary to find out the frequency of each element list = [1,2,6,3,4,5,1,1,3,2,2,5] list.sort() dict = {i: list.count(i) for i in list} print(dict) 在字典压缩方法中,对于列表中的i,是否为该方法提供了序列?所以需要1,2,3,4。。

嘿,我对我编写的以下python代码有疑问:

#create a list of elements
#use a dictionary to find out the frequency of each element
list = [1,2,6,3,4,5,1,1,3,2,2,5]
list.sort()
dict = {i: list.count(i) for i in list}
print(dict)
在字典压缩方法中,对于列表中的i,是否为该方法提供了序列?所以需要1,2,3,4。。就像钥匙一样。我的问题是为什么不花1到3次呢?因为我说过列表中的i,它不是必须把列表中的每个元素都作为键吗

我是python新手,所以请对我放松

我的问题是为什么不花1到3次呢

这是因为字典键是唯一的。如果为同一个键找到另一个条目,则该键的上一个值将被覆盖

那么,对于你的问题,如果你只是在计算了列表中每个元素的频率之后,那么你可以使用

请不要使用列表作为变量名。它是内置的

>>> lst = [1,2,6,3,4,5,1,1,3,2,2,5]
>>> from collections import Counter
>>> Counter(lst)
Counter({1: 3, 2: 3, 3: 2, 5: 2, 4: 1, 6: 1})
我的问题是为什么不花1到3次呢

这是因为字典键是唯一的。如果为同一个键找到另一个条目,则该键的上一个值将被覆盖

那么,对于你的问题,如果你只是在计算了列表中每个元素的频率之后,那么你可以使用

请不要使用列表作为变量名。它是内置的

>>> lst = [1,2,6,3,4,5,1,1,3,2,2,5]
>>> from collections import Counter
>>> Counter(lst)
Counter({1: 3, 2: 3, 3: 2, 5: 2, 4: 1, 6: 1})

是的,你的怀疑是对的。1将在迭代过程中出现3次。但是,由于字典具有唯一的键,因此每次出现1时,它都会用新生成的键/值对替换先前生成的键/值对。这将给出正确的答案,它不是最有效的。您可以将列表转换为集合,以避免重新处理重复的键:

dict = {i: list.count(i) for i in set(list)}
然而,即使是这种方法也非常低效,因为它对列表中的每个值都进行了完整的传递,即总比较。你可以一次通过列表就可以做到这一点,但你不会使用听写理解:

xs = [1,2,6,3,4,5,1,1,3,2,2,5]
counts = {}
for x in xs:
  counts[x] = counts.get(x, 0) + 1
计数的结果是:{1:3,2:3,3:2,4:1,5:2,6:1}


编辑:我不知道图书馆里有什么东西可以帮你做这件事。您应该使用Rohit Jain的解决方案来处理collections.Counter。

是的,您的怀疑是正确的。1将在迭代过程中出现3次。但是,由于字典具有唯一的键,因此每次出现1时,它都会用新生成的键/值对替换先前生成的键/值对。这将给出正确的答案,它不是最有效的。您可以将列表转换为集合,以避免重新处理重复的键:

dict = {i: list.count(i) for i in set(list)}
然而,即使是这种方法也非常低效,因为它对列表中的每个值都进行了完整的传递,即总比较。你可以一次通过列表就可以做到这一点,但你不会使用听写理解:

xs = [1,2,6,3,4,5,1,1,3,2,2,5]
counts = {}
for x in xs:
  counts[x] = counts.get(x, 0) + 1
计数的结果是:{1:3,2:3,3:2,4:1,5:2,6:1}


编辑:我不知道图书馆里有什么东西可以帮你做这件事。您应该将Rohit Jain的解决方案用于collections.Counter。您应该检查collections.Counter,顺便说一句。您应该检查collections.Counter,顺便说一句。谢谢您的输入!问题是,我的作业要求我使用dict来查找频率。所以我无法实现您提供的其他方法。谢谢您的输入!问题是,我的作业要求我使用dict来查找频率。所以我无法实现您提供的其他方法。