首页 > 解决方案 > 计算每个列中的元素数并将其保存在默认 dic

问题描述

我正在尝试计算每个项目的出现次数,并根据其在列表中的位置将其保存在默认字典中,例如:如果通过此列表:

                   [[1, 2, 3, 4],<br />
                   [1, 3, 4, 2], <br />
                   [1, 2, 4, 3], <br />
                   [3, 4, 1, 2], <br />
                   [3, 4, 2, 1]]<br />
result : {1: [3, 0, 1, 1], 2: [0, 2, 1, 2], 3: [2, 1, 1, 1], 4: [0, 2, 2, 1]} ****Which is correct**.**

当我通过 3 个或 2 个列表时会出现问题。例如:

                   [1, 2, 4, 3], 
                   [3, 4, 1, 2],
the result: {1: [1, 0, 0, 1]}) **Which is wrong**
it should be {1: [1, 0, 1, 0], 2: [0, 1, 0, 1], 3: [1, 0, 0, 1], 4: [0, 1, 1, 0]}
Since one occurred 1 time in col1 and 1 time in col 3 1: [1, 0, 1, 0] etc

这是我的代码:

     j =1
      while j in range(len(votes_grid)):
          for i in range (len(votes_grid[0])):
              c = Counter((x[i] for x in votes_grid))
              if j in c:
                  columnTable[j].append(c[j])
              else:
                  columnTable[j].append(0)
            j+=1

我解决了这个问题。

j = max(4, len(votes_grid))       
 while d in range(j+1):
            for i in range (len(votes_grid[0])):
                c = Counter((x[i] for x in votes_grid))
                if d in c:
                    columnTable[d].append(c[d])
                elif d in range(len(votes_grid[0])+1):
                    columnTable[d].append(0)
            d+=1

标签: pythondictionary

解决方案


您希望基于项目在列表中的位置进行计算,因此 enumerate函数在这里是您的朋友:它允许您迭代列表,同时为您提供当前对象在列表中的索引或位置。然后您的代码变得非常简单:

# Initialize resulting dictionary with keys 1 to 4
result = {n+1: [0, 0, 0, 0] for n in range(4)}

for votes in votes_grid:
    for pos, j in enumerate(votes):
        result[j][pos] += 1

推荐阅读