Python34:使用字典理解来复制值,形成一个字典列表到另一个字典

时间:2015-04-14 19:40:19

标签: python python-3.x dictionary python-3.4 dictionary-comprehension

我正在编写一个处理数据的脚本,所以我有一个包含带有计算值的字典的列表。一旦我计算出新的,我想用新条目附加相应的字典。

我知道我可以使用list或np数组执行此操作,但我想学习如何使用字典。我也刚刚开始使用列表理解,所以我希望更好地理解如何正确使用它。所以让自己的生活更加艰难。

以下是简化示例。

我计算数值并将它们放在字典中,然后在列表中对应每个条目。

A=[{'low':1},{'low':2}]
print(A)
[{'low': 1}, {'low': 2}]   # entry 0 corresponds to sample 1 and the next to sample 2

B=[{'hi':1},{'hi':2}]
print(B)
[{'hi': 1}, {'hi': 2}]   # entry 0 corresponds to sample 1 and the next to sample 2

C=[{}]*len(A)   # initialize list to contain a dictionary for each sample. Each dictionary will receive the corresponding values copied from A and B
print(C)
[{}, {}]

现在我尝试使用词典理解

{C[x].update(A[x]) for x in range(len(A))}
print(C)
[{'low': 2}, {'low': 2}]

结果不是我的预期。我想要这样的东西:

[{'low':1,'high':1},{'low':1,'high':1}]

我在这里不理解......

由于

2 个答案:

答案 0 :(得分:1)

术语C=[{}]*len(A)创建一个len(A)条目列表,这些条目都是相同的字典。对C[0]的更改也会更改C[1],因为两者相同。

使用C = [ {} for _ in A ]创建一个新字典作为列表的每个元素。

但总而言之,正如我在上面的评论中所提到的,我会考虑将新词典附加到现有列表中;这听起来最像你最初想要的。

答案 1 :(得分:1)

您需要同时使用AB来更新C。这是一个可能的解决方案。

A=[{'low':1},{'low':2}]
B=[{'hi':1},{'hi':2}]

C = [dict(a.items() + b.items()) for a,b in zip(A, B)]