2016-05-17 9 views
0

Wie aktualisiere ich einen key, value pair, wenn der andere key, value pair als wahr auswertet?Aktualisiert einen Wert, wenn ein separates Schlüsselwertpaar True ist

bank = { 
    "88386180860608512" : {  # This is a unique id number 
     "balance" : 100, 
     "name" : "Aehnon" 
    }, 
    "88469127777243136" : {  # This is a unique id number 
     "balance" : 100, 
     "name" : "Balanceofevil" 
    }, 
    "89741285950246912" : {  # This is a unique id number 
     "balance" : 3310, 
     "name" : "Sharky" 
    } 
} 

wenn mein Code mir eine Liste von Namen gibt, [ „Sharky“, „Aehnon“], ich brauche das Gleichgewicht dieser beiden Benutzer zu erhöhen, indem 50. Das Problem ist, dass ich weiß nicht, ihre "ID-Nummern".

Für weitere Erläuterungen möchte ich jedes Guthaben um 50 aktualisieren, das eine übereinstimmende key, value (I. E. "Name": Sharky ist eine Übereinstimmung mit dem Namen "Sharky" in meiner Liste).

Bisher weiß ich, dass ich einen Namen bestätigen kann, wenn ich dieses Beispiel für tun:

b = [subdict["name"] for subdict in bank.values()] 
if "Aehnon" in b: 
    print("True") 
else: 
    print("False) 

, die ausgewertet wird:

True 

Aber ich bin nicht sicher, wie dies mit einem dynamisch zu tun größere Liste, um die Salden zu aktualisieren.

+0

Der schnellste/einfachste Weg (vorausgesetzt, die Namen eindeutig sind) wird über einen separaten Index für die eindeutige Nummer haben - zB { „Sharky“: „89741285950246912“, ...}) – Mike

+0

Die Namen sind nicht immer einzigartig. Deshalb hat jeder eine ID. – Chad

+0

"Sharky": [sharky_id_1, Sharky_id_2 ...]? In der Tat fügen Sie dem Wörterbuch einen Index hinzu. – Mike

Antwort

1

Ist das was du willst?

bank = { 
    "88386180860608512" : {  # This is a unique id number 
     "balance" : 100, 
     "name" : "Aehnon" 
    }, 
    "88469127777243136" : {  # This is a unique id number 
     "balance" : 100, 
     "name" : "Balanceofevil" 
    }, 
    "89741285950246912" : {  # This is a unique id number 
     "balance" : 3310, 
     "name" : "Sharky" 
    } 
} 

names = ["Sharky", "Aehnon"] 

for v in bank.values(): 
    if v["name"] in names: 
     v['balance'] += 50 

print(bank) 
+0

Dies funktioniert für mich, und ich habe es in einem größeren Maßstab repliziert, um sicher zu sein. Kannst du mich durch deinen Denkprozess führen, zu dieser Schlussfolgerung zu kommen? – Chad

+0

@Chad, zuerst müssen Sie alle "bank" Subdicte durchlaufen: 'für v in bank.values ​​():'. Dann prüfen Sie einfach, ob der Name des aktuellen Unterdikats in der Liste der Namen steht, die Sie benötigen: 'if v [" name "] in Namen. Und wenn das so ist, kannst du das Gleichgewicht des Sub-Diktats aktualisieren: 'v ['balance'] + = 50' –

+0

Ah, ich verstehe es! Vielen Dank für Ihre Antwort. – Chad

Verwandte Themen