簡體   English   中英

如何使用map函數通過python中的字典通過鍵設置值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM