[英]How to set a value by key for a dictionary in python using the map function
我知道我可以通過使用設置鍵值對
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)
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}]
怎么樣:正如你所說的那樣
>>> 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
將使用(key,value)對更新字典。 不返回
map
是一種通過對可迭代對象的每個項目執行相同操作將可迭代對象轉換為列表的方法。 我認為這不是您想要在這里做的,這讓您感到困惑。
從表面上看(盡管您沒有提到要執行的實際操作是什么),簡單的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}
使用dict.__setitem__
和臨時列表(或任何其他集合類型程序)技巧:
>>> 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
。
這個怎么樣:
my_dict = {k: f(v) for k, v in my_dict.iteritems()}
f是您想要的任何函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.