2016-11-11 3 views
0

У меня есть эта вложенная dictionary:Python - Приращение словарь значения

playlist = {u'user1': {u'Roads': 1.0, u'Pyramid Song': 1.0, u'Go It Alone': 1.0}} 

, и я стараюсь, чтобы увеличить свои float значения по 1.0:

user = playlist.keys()[0] 
counts = playlist[user].values() 
for c in counts: 
    c += 1.0 

Я пришел далеко.

сейчас, как я updatedictionary с incremented value?

+0

Пожалуйста, не используйте код уценки для вещей, которые не код. – JETM

+0

Я не знаю, о чем вы говорите. –

+0

Вы можете просто сделать это как «playlist ['user1'] ['Roads'] + = 1'. Но не совсем уверен, что вы хотите сделать? Вы хотите увеличивать все в одно и то же время или только выбранные значения? – Marcin

ответ

1

Чтобы обновить значения float во вложенном словаре с различными уровнями вложенности, вам нужно написать рекурсивную функцию для просмотра структуры данных, обновления значений, когда они являются поплавками, или вызвать функцию, когда у вас есть словарь:

def update_floats(d, value=0): 
    for i in d: 
     if isinstance(d[i], dict): 
      update_floats(d[i], value) 
     elif isinstance(d[i], float): 
      d[i] += value 

update_floats(playlist, value=1) 
print(playlist) 
# {'user1': {'Go It Alone': 2.0, 'Pyramid Song': 2.0, 'Roads': 2.0}} 
+0

есть способ, в пределах вашей функции, настроить его, чтобы он увеличивал значения только для треков ('dict'' keys'), уже присутствующих в 'd', если при загрузке нового словаря списка воспроизведения? –

+0

Это то, что сейчас делает, или вы хотите дать больше описания, чтобы я ясно вас понял? –

+0

Здесь я создаю новые плейлисты, и новые результаты всегда печатают один и тот же плейлист с добавочными значениями. треки, не представленные ранее, не добавляются в словарь в качестве новых клавиш со значением = 1.0, я имею в виду –

2

Если словарь список воспроизведения только вложенными один уровень, вы можете использовать следующий фрагмент кода:

for user_key in playlist.keys(): 
    for song_key in playlist[user_key].keys(): 
     playlist[user_key][song_key] += 1 
Смежные вопросы