Python34:使用字典理解将值从一个字典列表复制到另一个字典列表
Python34: Using Dictionary Comprehension to Copy Values form one list of dictionaries to another
我正在编写一个脚本来处理数据,因此我有一个包含具有计算值的字典的列表。一旦我计算出新的,我想在适当的字典中添加新的条目。
我知道我可以使用 list 或 np array 来做到这一点,但我想学习如何使用字典。我也刚刚开始使用列表理解,所以我想更好地了解如何正确使用它。所以让自己的生活变得艰难。
这里是简化的例子。
我计算值并将它们放入字典中,然后将其放入列表中以对应每个条目。
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}]
我哪里不明白...
谢谢
术语 C=[{}]*len(A)
创建了一个包含 len(A)
个条目的列表,这些条目都是同一个词典。对 C[0]
的更改也会更改 C[1]
,因为两者是相同的。
使用C = [ {} for _ in A ]
创建一个新字典作为列表的每个元素。
但总而言之,正如我在上面的评论中提到的,我会考虑将新词典附加到现有列表中;这听起来最像你最初的意图。
您需要同时使用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)]
我正在编写一个脚本来处理数据,因此我有一个包含具有计算值的字典的列表。一旦我计算出新的,我想在适当的字典中添加新的条目。
我知道我可以使用 list 或 np array 来做到这一点,但我想学习如何使用字典。我也刚刚开始使用列表理解,所以我想更好地了解如何正确使用它。所以让自己的生活变得艰难。
这里是简化的例子。
我计算值并将它们放入字典中,然后将其放入列表中以对应每个条目。
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}]
我哪里不明白...
谢谢
术语 C=[{}]*len(A)
创建了一个包含 len(A)
个条目的列表,这些条目都是同一个词典。对 C[0]
的更改也会更改 C[1]
,因为两者是相同的。
使用C = [ {} for _ in A ]
创建一个新字典作为列表的每个元素。
但总而言之,正如我在上面的评论中提到的,我会考虑将新词典附加到现有列表中;这听起来最像你最初的意图。
您需要同时使用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)]