Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从循环中合并词典_Python_List_Dictionary_Merge - Fatal编程技术网

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。