我知道我可以使用
设置键值对 dict[key] = value
但我有一长串的类型
dict = [{a:1, b:2, c:3, d:4},
{a:2, b:3, c:4, d:5},
{a:5, b:7, c:3, d:9}]
我想按照
的方式做点什么 dict = map(lambda x: x['d'] <- x['d'] -1, dict)
我该怎么做? (这是一个非常简单的例子,所以我并不是真的试图通过特定键从所有项目中减去一个数字)
预期输出将在此情况下 一般情况我正在寻找
[{a:1, b:2, c:3, d:3},
{a:2, b:3, c:4, d:4},
{a:5, b:7, c:3, d:8}]
编辑:2
我认为以下方法不起作用 - 因此任何类似的解决方案都会有所帮助:
dict = map(lambda x: x.update(d, x[d] - 1), dict)
答案 0 :(得分:3)
dicts = [{'a':1, 'b':2, 'c':3, 'd':4},
{'a':2, 'b':3, 'c':4, 'd':5},
{'a':5, 'b':7, 'c':3, 'd':9}]
for d in dicts:
d['d'] -= 1
输出:
In [94]: dicts
Out[94]:
[{'d': 3, 'b': 2, 'c': 3, 'a': 1},
{'d': 4, 'b': 3, 'c': 4, 'a': 2},
{'d': 8, 'b': 7, 'c': 3, 'a': 5}]
答案 1 :(得分:2)
怎么样:正如你所说的那样
>>> dicts = [{'a':1, 'b':2, 'c':3, 'd':4},
{'a':2, 'b':3, 'c':4, 'd':5},
{'a':5, 'b':7, 'c':3, 'd':9}]
>>> map(lambda x:x.update([('d',x['d']-1)]),dicts)
[None, None, None]
>>> dicts
[{'a': 1, 'c': 3, 'b': 2, 'd': 3}, {'a': 2, 'c': 4, 'b': 3, 'd': 4}, {'a': 5, 'c': 3, 'b': 7, 'd': 8}]
update
将使用(键,值)对更新字典。返回无
答案 2 :(得分:2)
map
是一种通过对iterable中的每个项执行相同的操作,将iterable转换为列表的方法。我不认为你想在这里做什么,这让你很困惑。
从表面上看(虽然你还没有提到你想要执行的真正的操作),但只需要一个简单的for
:
dict_list = [
{'a': 1, 'b': 2, 'c': 3, 'd': 4},
{'a': 2, 'b': 3, 'c': 4, 'd': 5},
{'a': 5, 'b': 7, 'c': 3, 'd': 9},
]
for d in dict_list:
d['d'] -= 1
print(d)
<强>输出强>
{'a': 1, 'b': 2, 'c': 3, 'd': 3}
{'a': 2, 'b': 3, 'c': 4, 'd': 4}
{'a': 5, 'b': 7, 'c': 3, 'd': 8}
答案 3 :(得分:0)
使用dict.__setitem__
和临时列表(或任何其他收集typer)技巧:
>>> dicts = [{'a':1, 'b':2, 'c':3, 'd':4},
... {'a':2, 'b':3, 'c':4, 'd':5},
... {'a':5, 'b':7, 'c':3, 'd':9}]
>>> map(lambda d: [d.__setitem__('d', d['d'] - 1), d][1], dicts)
[{'a': 1, 'c': 3, 'b': 2, 'd': 3},
{'a': 2, 'c': 4, 'b': 3, 'd': 4},
{'a': 5, 'c': 3, 'b': 7, 'd': 8}]
使用简单的for
循环是建议的方式。特别是这个功能有副作用。
dict
作为变量名。它会影响内置函数/类型dict
。
答案 4 :(得分:-1)
这个怎么样:
my_dict = {k: f(v) for k, v in my_dict.iteritems()}
其中f是你想要的任何功能。