2016-10-03 38 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)