2016-11-11 4 views
0

Ich habe dieses verschachtelte dictionary:Python - Increment Wörterbuch Werte

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

und ich versuche, seine float Werte von 1.0 zu erhöhen:

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

ich so weit gekommen sind.

jetzt, wie kann ich update die dictionary mit der incremented value?

+0

Bitte keinen Code Abschlag für Dinge verwenden, die nicht Code sind. – JETM

+0

Ich weiß nicht wovon du sprichst .. –

+0

Du kannst einfach 'playlist [' user1 '] [' Roads '] + = 1' verwenden. Aber nicht wirklich sicher, was du machen willst? Sie möchten alles gleichzeitig oder nur ausgewählte Werte inkrementieren? – Marcin

Antwort

1

Um Float-Werte im verschachtelten Dictionary mit verschiedenen Verschachtelungsebenen zu aktualisieren, müssen Sie eine rekursive Funktion schreiben, um die Datenstruktur zu durchlaufen, die Werte zu aktualisieren oder die Funktion mit einem Dictionary aufzurufen:

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

gibt es einen Weg, innerhalb Ihrer Funktion, es zu optimieren, so dass es Werte nur für Spuren ('dict'' keys') erhöht, die bereits in 'd' vorhanden sind, wenn ich ein neues' playlist dictionary' einlege? –

+0

Das ist, was dies derzeit tut, oder Sie wollen mehr Beschreibung geben, damit ich Sie klar verstehe? –

+0

Ich erstelle hier neue Wiedergabelisten und die neuen Ergebnisse drucken immer die gleiche Wiedergabeliste mit inkrementierten Werten. Spuren, die vorher nicht vorhanden waren, werden dem Wörterbuch nicht als neue Schlüssel mit Wert = 1,0 hinzugefügt, ich meine –

2

Wenn die Playlist-Wörterbuch nur eine Ebene tief verschachtelt ist, können Sie das folgende snippet verwenden:

for user_key in playlist.keys(): 
    for song_key in playlist[user_key].keys(): 
     playlist[user_key][song_key] += 1