带有ifs的Python for循环

时间:2018-08-23 21:06:33

标签: python-3.x dictionary for-loop if-statement

我所拥有的:

我在字典中有两个键:

  • 一个带有值和
  • 一个带有值的索引。

    d = {}
    d['inds'] = [0, 5, 4, 2, 2, 5, 1]
    d['vals'] = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
    

我想做什么:

我想遍历字典和:

  • 如果下一个迭代索引=最后一个迭代索引+1,请列出相应的值
  • 如果下一个迭代索引不等于上一个迭代索引+1,请打印0并继续进行。所以基本上是在缺少索引的情况下填写0

我尝试过的

如果我使用以下循环:

for i in d['inds']:
    for v in d['vals']:
        for x in range(0, i):
         if i == x+1:
             print(v)
             break
    else:
         print(0)

我得到6次值列表。

所以我尝试交换i和x:

for i in d['inds']:
    for v in d['vals']:
        for x in range(0, i):
         if x == i+1:
             print(v)
             break
    else:
         print(0)

现在我只得到0列出7次。

TL; DR

如何使用条件语句遍历字典的值和索引,我在做什么错了?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,那么您需要这样的东西:

for i in range(len(d['inds'])):
    if i in d['inds']:
        print(d['vals'][i])
    else:
        print(0)

这将遍历所有可能的索引,如果当前索引不在d ['inds']中,则打印0,如果当前索引不在d ['inds']中,则打印该值。

答案 1 :(得分:0)

此解决方案需要功能$(document).ready(function () { $('#table_id').DataTable({ "ajax" : "/personas.json", ... }); }); chain

defaultdict

创建一个新的列表字典:

from itertools import chain
from collections import defaultdict

使用来自G = defaultdict(list) 的数据填充它:

d

创建一系列索引:

for k,v in zip(d['inds'], d['vals']):
    G[k].append(v)
#{0: [1.0], 5: [2.0, 6.0], 4: [3.0], 2: [4.0, 5.0], 1: [7.0]}

在新词典中查找每个索引。如果字典中没有索引,请使用indexes = range(min(d['inds']), max(d['inds']) + 1) 作为值。结果是可以使用[0]展平的嵌套列表:

chain