2016-12-28 46 views
-1

我想在列表的字典更新值 EX的字典更新值:我有一本字典输入:如何在列表

d={0: [0,1], 1:[1],2:[2],3:[3]} 

和对[0,2] ,我想在更换每一个0有0.2快译通,增加每个值> 2×1,所以这里所期望的输出:

{0: [0,2,1], 1:[1],2:[2],3:[4]} 

我试图遍历所有的值,但它并没有使招正确

def update_dict(_dict,_pair): 
    for i in range(len(_dict.keys())): 
     for j in range(len(_dict.values()[i])): 
      if dict[i][j]==_pair[0]: 
       dict[i][j].remove(_pair[0]) 
       dict[i].append(_pair) 
    return _dict 

我该如何做到这一点? 在此先感谢您的帮助

+0

请提供期望的输出 – DeepSpace

+3

为什么你连一个字典?为什么不列出?输入'[[0,1],[1],[2],[3]]',输出[[0,2,1],[1],[2],[4]]'。 –

+0

总是按顺序排列吗?是否总是要由一对替换的值? – depperm

回答

2

你不需要在这里的字典,你想要一个列表;你有一个有序的系列从0开始键,一个列表的索引会更有效地满足这一需求:

l = [[0,1], [1], [2], [3]] 

可以产生所需的输出:

for i, nested in enumerate(l): 
    # replace all 0 values with 1, 2 
    while 0 in nested: 
     zero_index = nested.index(0) 
     nested[zero_index:zero_index + 1] = [1, 2] 
    # increment values in the nested list if the index is over 2: 
    if i > 2: 
     nested[:] = [v + 1 for v in nested] 

这改变了原来的嵌套列表中-地点。

1

如果你仍然想使用字典,这将做到:

d = {0: [0,1], 1:[1],2:[2],3:[3]} 

for k, li in d.items(): 
    for i, v in enumerate(li[:]): 
     if v == 0: 
      li.insert(i + 1, 2) 
     elif v > 2: 
      d[k][i] += 1 

print(d) 
# {0: [0, 2, 1], 1: [1], 2: [2], 3: [4]} 

只要记住该键顺序是不能保证。

1

有大量的解决方案。例如:

d = {0: [0,1], 1:[1],2:[2],3:[3]} 
new_d = dict() 
for k in d: 
    new_d[k] = sum([i == 0 and [0, 2] or i > 2 and \ 
        [i + 1] or [i] for i in d[k]], []) 

d = {0: [0,1], 1:[1],2:[2],3:[3]} 
new_d = dict([(k, sum([i == 0 and [0, 2] or i > 2 \ 
       and [i + 1] or [i] for i in v], [])) for k, v in d.items()]) 
1

另一种替代方案:

d={0: [0,1], 1:[1],2:[2],3:[3]} 

for k,a in d.items(): 
    for key, digit in enumerate(a): 
     if digit == 0: a[key:key+1] = [0,2] 
     if digit > 2: a[key] += 1 

print(d) 

输出:

{0: [0, 2, 1], 1: [1], 2: [2], 3: [4]}