我正在编写一个处理数据的脚本,所以我有一个包含带有计算值的字典的列表。一旦我计算出新的,我想用新条目附加相应的字典。
我知道我可以使用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}]
我在这里不理解......
由于
答案 0 :(得分:1)
术语C=[{}]*len(A)
创建一个len(A)
条目列表,这些条目都是相同的字典。对C[0]
的更改也会更改C[1]
,因为两者相同。
使用C = [ {} for _ in A ]
创建一个新字典作为列表的每个元素。
但总而言之,正如我在上面的评论中所提到的,我会考虑将新词典附加到现有列表中;这听起来最像你最初想要的。
答案 1 :(得分:1)
您需要同时使用A
和B
来更新C
。这是一个可能的解决方案。
A=[{'low':1},{'low':2}]
B=[{'hi':1},{'hi':2}]
C = [dict(a.items() + b.items()) for a,b in zip(A, B)]