簡體   English   中英

更新列表理解中的字典

[英]update dict in list comprehension

給定下面的兩個字典,我試圖創建一個新字典的列表,該列表結合一個(com)中的項目,該列表將為每個成員重復,僅第二個(e)的值一次輸入,在鍵“ n”下。 例如,第一個列表成員為: {'n': 330, 'b': 2, 'a': 1}如果我在列表推導中使用update()將第一對字典中的鍵對值添加到結果中我得到一個有兩個None成員的列表。 我嘗試了不同的方式來編寫此代碼,例如使用map()以及同時在python 2和3上使用; 所以我問專家。

>>> com
{'b': 2, 'a': 1}
>>> e
{'p': 330, 'r': 220}
>>> [n for rt in e.values() for n in [{'n':rt}]]
[{'n': 330}, {'n': 220}]
>>> [n.update(com) for rt in e.values() for n in [{'n':rt}]]
[None, None]

為了澄清問題陳述:

給定一個固定的地圖com和一個包含一系列元素的地圖(我會發現名稱'nvals'更多助記符),返回一個地圖列表,其中列表中的每個元素都有nvals中的一個值作為key的值'n'com所有元素。

因此,以下代碼返回所需的結果:

>>> com = {'b': 2, 'a': 1}
>>> nvals = {'p': 330, 'r': 220}
>>> l = []
>>> for n in nvals.values():
...     d = dict(com) # Make sure to clone the dictionary.
...     d["n"] = n
...     l.append(d)
...
>>> l
[{'n': 330, 'b': 2, 'a': 1}, {'n': 220, 'b': 2, 'a': 1}]
>>>

麻煩在於那不是列表理解

>>> [dict(list(com.items()) + [('n', n)]) for n in nvals.values()]
[{'n': 330, 'b': 2, 'a': 1}, {'n': 220, 'b': 2, 'a': 1}]
>>>

似乎符合要求。

我不得不說,我認為該循環更易於閱讀。

嘗試這個:

    com = {'b': 2, 'a': 1}
    e = {'p': 330, 'r': 220}
    res = [{i:j for i,j in com.items()+[("n",v)]} for v in e.values()]

或這個:

    res = map(lambda x: dict([("n",x)]+com.items()), e.values())

或者可能:

    res = [dict(zip(["n"]+com.keys(),[v]+com.values())) for v in e.values()]

您不只是喜歡python嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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