首页 > 解决方案 > 需要帮助来弄清楚如何更新一些 python 字典列表中的 key.value

问题描述

大家好,我有这些数据:

members = [{'n1': 1, 'active': True, 'ticket': 10, },
             {'n2': 2, 'active': False, 'ticket': 0, },
             {'n3': 3, 'active': True, 'ticket': 12, }]

我需要不时更新成员,检查他们是否处于活动状态,并为活动成员提供新票,并可能过滤非活动成员。

为了检查活动或非活动我可以使用这样的一些:

inactive = list(filter(lambda n: n.get('active') == False, members))

或者也许保持不活跃但不给他们新票。
更新是用户对 n 和票证的输入。
所以我需要检查输入是否已经在字典中只是为了更新所需的数据,即。如果用户为 n 输入 1,我只有 1,所以我只更新票证。否则我更新两者。

但是我有一个小问题,我怎么能检查我将在 n 中输入的数字是否已经在列表中的字典中。

对于新成员,我可以使用这样的一些:

updated = {'n': int(input('number'), 'active': True, 'ticket': int(input('number')}

总而言之:
我需要检查 n.value 是否在 dict 中,如果是,则仅更新 ['ticket].value 或者如果不使用 n 更新 dict 并为新值添加票证。

保罗

标签: python-3.xlistdictionary

解决方案


>>> members = [{'n': 1, 'active': True, 'ticket': 10, },
...             {'n': 2, 'active': False, 'ticket': 0, },
...             {'n': 3, 'active': True, 'ticket': 12, }]

要查找成员,您只需遍历成员,直到找到好的成员:

>>> def find_member(k):
...    return next(((i, m) for i, m in enumerate(members)  if m['n'] == k), (-1, None))

next函数将返回第一个找到的 key'n'具有 value 的成员k,或者Npne如果没有。如果您需要按名称删除成员,我添加了一个索引。

>>> find_member(2)
(1, {'n': 2, 'active': False, 'ticket': 0})
>>> find_member(10)
(-1, None)

要更新成员,请使用此函数并执行更新:

>>> def update_member(k, t):
...     i, m = find_member(k)
...     if i == -1:
...         members.append({'n': k, 'active': True, 'ticket': t})
...     else:
...         m.update({'ticket': t})

>>> update_member(1, 15)
>>> members
[{'n': 1, 'active': True, 'ticket': 15}, {'n': 2, 'active': False, 'ticket': 0}, {'n': 3, 'active': True, 'ticket': 12}]

我的建议是:创建一个Member包装 dict 并提供一些有用方法(set_active, renew_ticket, ...)的类和一个Members包装列表并提供其他有用方法的类(find_by_name, update_by_name, delete_by_name, ...)


推荐阅读