如何使用map函数在python中为字典设置键值

时间:2014-11-09 01:29:27

标签: python list dictionary map lambda

我知道我可以使用

设置键值对

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)

5 个答案:

答案 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是你想要的任何功能。