Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 字典-返回非零值和相应的索引位置_Python_Dictionary - Fatal编程技术网

Python 字典-返回非零值和相应的索引位置

Python 字典-返回非零值和相应的索引位置,python,dictionary,Python,Dictionary,我花了无数时间观看python字典教程,但仍然不知道如何返回所需的结果 给定一些等级列表(0到1作为浮动),称为变量y y=[0.0,0.97,0.0,0.0,0.0,0.82,0.66,0.0,0.0,0.0,0.90,0.0,0.0] 我有一本字典叫dic dic={'pos':[],'grds':[]} 我想返回列表中所有非零等级和对应位置作为字典,dic,而不修改y列表。非常感谢帮助解决问题,但也希望了解解决方案。以OP希望的方式获取输出的代码: pos_grade = {'pos':

我花了无数时间观看python字典教程,但仍然不知道如何返回所需的结果

给定一些等级列表(0到1作为浮动),称为变量
y

y=[0.0,0.97,0.0,0.0,0.0,0.82,0.66,0.0,0.0,0.0,0.90,0.0,0.0]

我有一本字典叫
dic

dic={'pos':[],'grds':[]}


我想返回列表中所有非零等级和对应位置作为字典,
dic
,而不修改
y
列表。非常感谢帮助解决问题,但也希望了解解决方案。

以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]}
{0.9: 9, 0.97: 1, 0.66: 6, 0.82: 5}
defaultdict(<type 'list'>, {0.9: [9], 0.97: [1], 0.66: [6], 0.82: [5, 12]})
输出:

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]}
{0.9: 9, 0.97: 1, 0.66: 6, 0.82: 5}
defaultdict(<type 'list'>, {0.9: [9], 0.97: [1], 0.66: [6], 0.82: [5, 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
输出:

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]}
{0.9: 9, 0.97: 1, 0.66: 6, 0.82: 5}
defaultdict(<type 'list'>, {0.9: [9], 0.97: [1], 0.66: [6], 0.82: [5, 12]})

编辑:

如果列表中的等级存在重复值:

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
输出:

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]}
{0.9: 9, 0.97: 1, 0.66: 6, 0.82: 5}
defaultdict(<type 'list'>, {0.9: [9], 0.97: [1], 0.66: [6], 0.82: [5, 12]})

另一种解决方案是使用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}

这是家庭作业吗?嗯。。。无需使用
dic['pos']
即可完成此操作。到目前为止,您尝试了哪些功能?:-)可能循环?使用在列表上循环将是一个很好的开始。是的,这是一个赋值,字典是按规定定义的,不能更改,因此返回的结果应该是两个不同的列表,它们是“键”‘pos’和‘grd’的“值”。我试图在一个周末自学Python,所以我还是个新手。我尝试了8种方法,其中一些方法是基于我为无关问题所做的工作,一种是我自己写的(显然是错误的)——用于dic.items()中的'pos','grds'=0好的。。。如果有多个相同[非零]等级的实例?@TrebuchetMS,我们可以使用值列表来解决它。我只是想把这段代码作为一个起点,这样OP可以进一步了解它;i+=1但没问题。谢谢您的帮助help@Jay和投石机;这个问题的理想输出是dic['pos']=[1,5,6,9]dic['grds']=[0.97,0.82,0.66,0.90]@Mac,现在查看我帖子的顶部。这应该会对您有所帮助。问题所需的输出将是dic['pos']=[1,5,6,9]dic['grds']=[0.97,0.82,0.66,0.90]