2016-10-03 63 views
0

我有字典嵌套在列表中。詞典都設置如下:在Python中添加基於ID號的嵌套字典中的項目

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

我有一個列表,這些字典的倍數,所以名單如下:

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

我想要做的,是檢查是否已經有一個帶有來自列表中輸入的ID的字典,如果有,則從輸入中添加餘額。 有沒有可讀的pythonic方法來做到這一點?

回答

0

我在這裏聽到的是「我如何從列表中獲得項目,因爲我知道關於它的一些獨特的關鍵值?」。你承諾保持當前數據結構多少?我傾向於完全放棄這個清單,並使用一個字典。

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

現在檢查是否存在只是if some_id in d:並增加了平衡的id爲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)