Python:如何修改dicts列表中的特定(键,值)对?

时间:2015-11-16 07:10:21

标签: python list python-2.7 dictionary in-place

我有:

l = [{"a": 2}, {"a": 4}, {"a": 10}, {"a": 11}]

我需要乘以2所有" a"字谜键。所以我会:

l = [{'a': 4}, {'a': 8}, {'a': 20}, {'a': 22}]

我可以通过这样的代码来实现:

for i in l:
    i.update({"a": 2 * i["a"]})

但它很难看。

应该有漂亮的Pythonic单线。

3 个答案:

答案 0 :(得分:1)

这是一个更新词典并返回列表的班轮代码。但是,如果词典没有a键,则会引发KeyError。并且,所有字典都会更新,直到发生异常。我希望它有所帮助,但代码可读性很重要,所以简单地在for循环中更新字典不会花费太多。

>>> l = [{"a": 2}, {"a": 4}, {"a": 10}, {"a": 11}]
>>> map(lambda x:(x,x.__setitem__("a",x["a"]*2))[0],l)
[{'a': 4}, {'a': 8}, {'a': 20}, {'a': 22}]

答案 1 :(得分:0)

l = [{k:v*2} for d in l for k, v in d.items()]

答案 2 :(得分:0)

这也会考虑是否确实存在密钥a

for d in l:
  if 'a' in d:
    d['a'] *= 2

或者

for d in l:
  try:
    d['a'] *= 2
  except KeyError:
    # No key `a`
    pass