更新列表理解中的字典

时间:2016-05-07 05:22:45

标签: python dictionary 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]

2 个答案:

答案 0 :(得分:0)

澄清问题陈述:

  

给定一个固定的地图com和一个包含一系列元素的地图(我会找到名称' nvals' more mnemonic),返回一个地图列表,其中列表的每个元素将nvals中的一个值作为键'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}]
>>>

似乎符合要求。

我不得不说,我觉得我觉得循环更容易阅读。

答案 1 :(得分:0)

试试这个:

    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吗?