python - 计算每个列中的元素数并将其保存在默认 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
解决方案
您希望基于项目在列表中的位置进行计算,因此 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
推荐阅读
- c# - 使用 Unity,什么可能导致代码无法在 FixedUpdate() 中执行,而在 Update() 中却执行?
- c# - 仅将身份服务器 4 用于没有 OpenID Connect 范围的 Oauth2 授权 - 可能吗?
- javascript - 函数 - 每隔一个单词返回一个大写字母
- android - 通过 NFC 发送 NdefRecord 但接收 android.nfc.tech.IsoDep
- flutter - 如何使用 Shortcuts/Intent/Actions 在 Flutter 中注册应用程序全局操作?
- oracle - 选择 DISTINCT 结果后的字符串连接
- javascript - JavaScript:动态更改数据范围规则的值
- azure-devops - 使用 azure dev ops 拉取请求代码覆盖率失败
- reactjs - 所以我使用 moment.js 来查找来自后端(UTC)的时间和来自 moment.js 的本地时间的时差
- bash - 是否可以在 Bash 脚本的 switch case 中结合两个条件?