2016-12-28 2 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]]', output '[[0, 2, 1], [1], [2], [4]]'. –

+0

- списки всегда на заказ? 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]} 
Смежные вопросы