假设我们在Python中有一个词典列表:
A = [{'x': 1, 'y': 2, 'z': 3},{'x': 0, 'y': 10, 'z': 11}]
我们使用map()
x = map((lambda i: i['x']), A)
并与他们做点什么。现在,以类似方式更新'x'
的所有A
- 值的最简洁方法是什么 - 即,不使用for循环?
答案 0 :(得分:1)
>>> r = [{'x': 1, 'y': 2, 'z': 3},{'x': 0, 'y': 10, 'z': 11}]
>>> r
[{'y': 2, 'x': 1, 'z': 3}, {'y': 10, 'x': 0, 'z': 11}]
>>> [i.__setitem__('x', 10) for i in r]
[None, None]
>>> r
[{'y': 2, 'x': 10, 'z': 3}, {'y': 10, 'x': 10, 'z': 11}]
这并不可怕,但我认为for循环会更好。如果'r'非常大并且性能非常重要,我只会这样做。
答案 1 :(得分:1)
单行?
map(lambda (i,v) : A[i].update(v), enumerate(map((lambda i: {'x':i['x'] + 1}), A)))
在这种情况下,你在增加X的值。虽然我建议这不是最好的方式做任何事情,也不是最可读的。至少通过执行更新方法,您不依赖于像 setitem 这样的“隐藏”内部,并且它可以更灵活一点,因为您可以一次更改多个键。
答案 2 :(得分:0)
>>> map((lambda i: i.__setitem__('x',10)), A)
[None, None]
>>> A
[{'y': 2, 'x': 10, 'z': 3}, {'y': 10, 'x': 10, 'z': 11}]
但这很难看。我会使用for循环。
答案 3 :(得分:0)
让X
成为“x”的更新值列表:
while X:
A[len(X)]['x'] = X.pop()
答案 4 :(得分:0)
如果您首先将所有'x'值提取到list
中,如图所示,您可以像这样更新它们:
A = [{'x': 1, 'y': 2, 'z': 3},{'x': 0, 'y': 10, 'z': 11}]
x = map((lambda i: i['x']), A)
def do_something(x):
return x+1
print A
# [{'y': 2, 'x': 1, 'z': 3}, {'y': 10, 'x': 0, 'z': 11}]
map((lambda i,v: i.__setitem__('x', do_something(v))), A, x)
print A
# [{'y': 2, 'x': 2, 'z': 3}, {'y': 10, 'x': 1, 'z': 11}]
然而,使用以下内容可以更有效地获得相同的结果,不需要将所有'x'值首先提取到单独的列表中:
map((lambda i: (i.__setitem__('x', do_something(i['x'])))), A)