如何为嵌套列表编号中的出现次数写dict-compression

问题描述

li=[[1,5,3,2,6],[2,6,3]]
di1={}
for i in range(3):
    for j in set(li[i]):
        if j in di1:
            di1[j]=di1[j]+li[i].count(j)
        else:
            di1[j]=li[i].count(j)
print(di1)
output:{1: 1,2: 3,3: 6,5: 6,6: 3}
di={}
di={j:di[j]+li[i].count(j) if j in di else li[i].count(j)  for i in range(3) for j in set(li[i])}
ouput:{1: 1,2: 1,3: 3,5: 3,6: 1}

我需要在变量li中查找元素的数量,当我尝试使用for循环时,它可以正常工作,但是如果我尝试使用dict-comprehension,则得到不同的输出,那么代码出了什么问题? dict-comprehension中的if不会进入。

解决方法

我认为问题在于您依赖于要构建的字典。 一个简单的解决方案是首先将列表弄平,然后再进行字典理解。

li = [item for sublist in li for item in sublist ]
di={j:li.count(j) for j in sorted(li) }
print(di)