[英]for loops within dictionaries vs dictionaries within for loops?
您好我有一个关于遍历列表并将列表中的项目及其频率添加到字典的问题。
i = ['apple','pear','red','apple','red','red','pear','pear','pear']
d = {x:i.count(x) for x in i}
print (d)
产出
{'pear': 4, 'apple': 2, 'red': 3}
然而
i = ['apple','pear','red','apple','red','red','pear', 'pear', 'pear']
d = {}
for x in i:
d={x:i.count(x)}
print(d)
产出
{'pear': 4}
我需要遍历列表,同时将字典中的每个迭代添加到新列表中。 但是我不明白为什么两个不同的代码会给出不同的结果。
令人鼓舞的是,计数 function 在第二个上起作用。 但是我对苹果和红色消失的地方感到困惑。
很抱歉措辞不当等等,这几个小时一直在工作,这让我发疯。 非常感谢您抽出时间提供帮助
我对为什么这两个结果不同感到困惑
问题是您必须在第二个循环中添加key:value
对,而不是在每个循环中都覆盖d
。
i = ['apple','pear','red','apple','red','red','pear','pear','pear']
d = {}
for x in i:
d[x] = i.count(x)
print(d)
output 将与您的第一个 function 相同。
{'pear': 4, 'apple': 2, 'red': 3}
基本上在你的第二个例子中,当你做d={x:i.count(x)}
时,你有一个单元素字典,并且对于每个循环你都会覆盖它。 然后它只显示pear: 4
因为pear
是i
列表中的最后一个元素。
i = ['apple','pear','red','apple','red','red','pear', 'pear', 'pear']
d = {}
log = []
for x in i:
log.append({x:i.count(x)})
log
是
[{'apple': 2},
{'pear': 4},
{'red': 3},
{'apple': 2},
{'red': 3},
{'red': 3},
{'pear': 4},
{'pear': 4},
{'pear': 4}]
我刚刚运行了你的第一段代码,它给了我
{'apple': 2, 'pear': 4, 'red': 3}
这是正确的,但与您在问题中所说的不同。
为了解决您的第二段代码,您在循环的每次迭代中执行赋值操作,因此每次访问i
的新项目时都会重写d
的值
我个人建议使用 Counter 来解决这个问题:
>>> from collections import Counter
>>> z = ['blue', 'red', 'blue', 'yellow', 'blue', 'red']
>>> Counter(z)
Counter({'blue': 3, 'red': 2, 'yellow': 1})
varLs = ['apple','pear','red','apple','red','red','pear','pear','pear']
def frequency(varLs):
counters = {}
for item in varLs:
if item not in counters:
counters[item] = 1
else:
counters[item]+= 1
return counters
print(frequency(varLs))
返回 {'apple': 2, 'pear': 4, 'red': 3}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.