2016-10-03 10 views
0

辞書にリストがネストされています。次のように辞書が設定されていますPythonのID番号に基づいてネストされた辞書に項目を追加します

{'ID': 123, 'Balance': 45, 'Comments': None}

私は、リスト内のこれらの辞書の倍数を持っているので、リストは次のようになります。私は何をしようとしている

[{'ID': 123, 'Balance': 45, 'Comments': None}, {'ID': 456, 'Balance': 78, 'Comments': None}] 

、ありますリスト内の入力からのIDを持つ辞書がすでに存在するかどうかを確認し、存在する場合は、入力から残高を追加します。 これを行うための読み込み不可能な方法はありますか?

答えて

0

私がここで聞いているのは、「リストから項目を取得するにはどうすればよいのですか?どのくらい現在のデータ構造を維持することにコミットしていますか?私はリストを完全に省き、dict-of-dictsを使う傾向がある。 IDが存在する場合、今チェック

d = { 
    123: {'Balance': 45, 'Comments': None} 
    456: {'Balance': 78, 'Comments': None} 
} 

はちょうどif some_id in d:あるとのバランスに追加するd[some_id]["Balance"] += some_amountです。リストの上に

0
data = [{'ID': 123, 'Balance': 45, 'Comments': None}, {'ID': 456, 'Balance': 78, 'Comments': None}] 
any(inputData == item['ID'] for item in data) 

inputData = 123 
True 
0

反復は、IDとの一致があるかどうか、もしそう、その辞書のBALANCEの既存の値に値を追加することを確認してください。以下はサンプルコードです。

>>> my_dict_list = [{'ID': 123, 'Balance': 45, 'Comments': None}, {'ID': 456, 'Balance': 78, 'Comments': None}] 
>>> 
>>> new_id = int(raw_input()) 
123 
>>> for dict_obj in my_dict_list: 
...  if new_id == dict_obj['ID']: 
...   dict_obj['Balance'] += float(raw_input()) 
... 
34 
>>> my_dict_list 
[{'Balance': 79.0, 'ID': 123, 'Comments': None}, {'Balance': 78, 'ID': 456, 'Comments': None}] 
# Value updated for "ID" 123 
0
accounts = [ 
    {'ID': 123, 'Balance': 45, 'Comments': None}, 
    {'ID': 456, 'Balance': 78, 'Comments': None}, 
] 

def update_balance(account_id, amount): 
    account = next((a for a in accounts if a['ID'] == account_id), None) 
    if account: 
     account['Balance'] += amount 
     return account 

account = int(input('Account ID: ')) 
amount = float(input('Amount: ')) 

update_balance(account, amount) 
関連する問題