Python 从循环中合并词典
我有使用循环创建的字典:Python 从循环中合并词典,python,list,dictionary,merge,Python,List,Dictionary,Merge,我有使用循环创建的字典: for (obj1, obj2), df in df2.groupby(['a', 'b']): obj_dict = (df .query('a == @obj1') .query('b == @obj2') .set_index('b')['c'] .to_dict() ) print(obj_
for (obj1, obj2), df in df2.groupby(['a', 'b']):
obj_dict = (df
.query('a == @obj1')
.query('b == @obj2')
.set_index('b')['c']
.to_dict()
)
print(obj_dict)
这就是结果:
{'2': '3'}
{'5': '6'}
{'8': '9'}
我想将这些词典合并为一个如下所示的词典:
{'2': '3','5': '6','8': '9'}
我已尝试按建议使用.update,但似乎不起作用:
for (obj1, obj2), df in df2.groupby(['a', 'b']):
obj_dict = (df
.query('a == @obj1')
.query('b == @obj2')
.set_index('b')['c']
.to_dict()
)
print(obj_dict)
result = {}
for d in obj_dict:
print(d)
result.update(d)
结果:
{'2': '3'}
2
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-107-ca40733d19d7> in <module>
10 for d in obj_dict:
11 print(d)
---> 12 result.update(d)
ValueError: dictionary update sequence element #0 has length 1; 2 is required
我真的不明白为什么结果中的d只是键,而不是实际的字典。d是键,因为您正在迭代字典本身,而不是字典列表。python特性不是bug。我会稍微改变一下代码
我们定义了一个新的obj_dict,它将包含所有合并的数据。然后我们用从数据帧创建的新dict更新它
obj_dict = {}
for (obj1, obj2), df in df2.groupby(['a', 'b']):
new_dict = (df
.query('a == @obj1')
.query('b == @obj2')
.set_index('b')['c']
.to_dict()
)
obj_dict.update(new_dict)
看起来你的事情有点乱。试试这个:
result = {}
for (obj1, obj2), df in df2.groupby(['a', 'b']):
obj_dict = (df
.query('a == @obj1')
.query('b == @obj2')
.set_index('b')['c']
.to_dict()
)
print(obj_dict)
result.update(obj_dict)
如果你在字典上迭代,你会在它的键上得到一个迭代器。如果同时需要键和值,则迭代dict.items。