考虑到下面的两个词典,我试图创建一个新词典列表,组合来自一个(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]
答案 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吗?