我花了无数的时间观看python词典教程,但仍然不知道如何返回所需的结果。
给出一些变量(y
)的等级列表(浮点数为0到1)。
y = [0.0, 0.97, 0.0, 0.0, 0.0, 0.82, 0.66, 0.0, 0.0, 0.90, 0.0, 0.0]
我有一本叫做dic
的字典。
dic = {'pos':[ ], 'grds':[ ]}
我想返回列表中所有非零成绩和相应位置作为字典dic
,而无需修改y
列表。非常感谢您提供解决方案,但也希望了解解决方案。
答案 0 :(得分:2)
用于以OP期望的方式获取输出的代码:
pos_grade = {'pos': [], 'grds': []}
y = [0.0, 0.97, 0.0, 0.0, 0.0, 0.82, 0.66, 0.0, 0.0, 0.90, 0.0, 0.0, 0.82]
for i, x in enumerate(y):
if x != 0.0:
pos_grade['pos'].append(i)
pos_grade['grds'].append(x)
print pos_grade
输出:
{'grds': [0.97, 0.82, 0.66, 0.9, 0.82], 'pos': [1, 5, 6, 9, 12]}
如果只想使用字典来获取等级和值,则可以使用以下方法。
pos_grade = {}
y = [0.0, 0.97, 0.0, 0.0, 0.0, 0.82, 0.66, 0.0, 0.0, 0.90, 0.0, 0.0]
i = 0
for x in y:
if x != 0.0:
pos_grade[x] = i
i += 1
print pos_grade
输出:
{0.9: 9, 0.97: 1, 0.66: 6, 0.82: 5}
编辑:
如果列表中的成绩存在重复值:
from collections import defaultdict
pos_grade = defaultdict(list)
y = [0.0, 0.97, 0.0, 0.0, 0.0, 0.82, 0.66, 0.0, 0.0, 0.90, 0.0, 0.0, 0.82]
i = 0
for x in y:
if x != 0.0:
pos_grade[x].append(i)
i += 1
print pos_grade
输出:
defaultdict(<type 'list'>, {0.9: [9], 0.97: [1], 0.66: [6], 0.82: [5, 12]})
使用enumerate
的代码:
from collections import defaultdict
pos_grade = defaultdict(list)
y = [0.0, 0.97, 0.0, 0.0, 0.0, 0.82, 0.66, 0.0, 0.0, 0.90, 0.0, 0.0, 0.82]
for i, x in enumerate(y):
if x != 0.0:
pos_grade[x].append(i)
print pos_grade
答案 1 :(得分:1)
另一种解决方案是使用dict理解:
y = [0.0, 0.97, 0.0, 0.0, 0.0, 0.82, 0.66, 0.0, 0.0, 0.90, 0.0, 0.0]
{v:k for k,v in enumerate(y) if v!=0}
输出
{0.66: 6, 0.82: 5, 0.9: 9, 0.97: 1}