如何找到值为dictionary
的{{1}},然后更新user7
,例如将3添加到现有的4。
match_sum
我有这个,并且不确定它是否是最好的做法。
l = [{'user': 'user6', 'match_sum': 8},
{'user': 'user7', 'match_sum': 4},
{'user': 'user9', 'match_sum': 7},
{'user': 'user8', 'match_sum': 2}
]
答案 0 :(得分:6)
您还可以使用next()
:
l = [{'user': 'user6', 'match_sum': 8},
{'user': 'user7', 'match_sum': 4},
{'user': 'user9', 'match_sum': 7},
{'user': 'user8', 'match_sum': 2}]
d = next(item for item in l if item['user'] == 'user7')
d['match_sum'] += 3
print(l)
打印:
[{'match_sum': 8, 'user': 'user6'},
{'match_sum': 7, 'user': 'user7'},
{'match_sum': 7, 'user': 'user9'},
{'match_sum': 2, 'user': 'user8'}]
请注意,如果在调用default
时未指定next()
(第二个参数),则会引发StopIteration
异常:
>>> d = next(item for item in l if item['user'] == 'unknown user')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
如果指定了default
,那么会发生什么:
>>> next((item for item in l if item['user'] == 'unknown user'), 'Nothing found')
'Nothing found'
答案 1 :(得分:0)
如果有人希望直接更新列表中存在的字典键值
l = [{'user': 'user6', 'match_sum': 8},
{'user': 'user7', 'match_sum': 4},
{'user': 'user9', 'match_sum': 7},
{'user': 'user8', 'match_sum': 2}
]
to_be_updated_data = {"match_sum":8}
item = next(filter(lambda x: x["user"]=='user7', l),None)
if item is not None:
item.update(to_be_updated_data)
输出将是:
[{'user': 'user6', 'match_sum': 8},
{'user': 'user7', 'match_sum': 8},
{'user': 'user9', 'match_sum': 7},
{'user': 'user8', 'match_sum': 2}]