Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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_Dictionary - Fatal编程技术网

Python 用于将字典值转换为单独字典的单行程序

Python 用于将字典值转换为单独字典的单行程序,python,dictionary,Python,Dictionary,我有一本字典dict1,它的值也是字典 dict1 = { 0: {'test1': ['pass', 'pass']}, 1: {'test2': ['fail', 'pass']}, 2: {'test3': ['fail', 'fail']}, 3: {'test4': []}, 4: {'test5': ['pass']}, 5: {'test6': ['pass', 'pass']} } 我想把它的值作为一个单独的字典dict2,我已经这

我有一本字典dict1,它的值也是字典

dict1 = 
  {
   0: {'test1': ['pass', 'pass']},
   1: {'test2': ['fail', 'pass']},
   2: {'test3': ['fail', 'fail']},
   3: {'test4': []},
   4: {'test5': ['pass']},
   5: {'test6': ['pass', 'pass']}
  }
我想把它的值作为一个单独的字典dict2,我已经这样试过了

dict2 = {k:v for k,v in dict(dict1.values()).items()}
下面有个错误

ValueError: dictionary update sequence element #0 has length 1; 2 is required
预期产量

dict2 =
      {
      'test1': ['pass', 'pass'],
      'test2': ['fail', 'pass'],
      'test3': ['fail', 'fail'],
      'test4': [],
      'test5': ['pass'],
      'test6': ['pass', 'pass']
      }

非常感谢您的帮助

您可以使用
dict

dict2 = dict(b for i in dict1.values() for b in i.items())
输出:

{'test1': ['pass', 'pass'], 
 'test2': ['fail', 'pass'], 
 'test3': ['fail', 'fail'], 
 'test4': [], 
 'test5': ['pass'], 
 'test6': ['pass', 'pass']
}

由于
dict(dict1.values())
而导致出现错误。您正在将
dict()
强制转换为
dict_值([{'test1':['pass','pass']},{'test2':['fail','pass']},…])
,这不是转换为字典的有效类型,因为内部字典的长度是1而不是2,正如错误所示。您可以使用dict1.values()中x的len(x)来验证这一点,它将返回
[1,1,1,1,1,1]

要获得您想要的结果,您可以使用以下方法:

它将首先遍历dict1的
值()
(因为我们不需要最外层的键)。然后它将迭代内部dict
内部dict
项()
,并分配键值对
key:value

上述方法与以下嵌套循环方法相同:

result = {}
for inner_dict in dict1.values():
    for key, value in inner_dict.items():
        result[key] = value

print(result)
# {'test1': ['pass', 'pass'], 'test2': ['fail', 'pass'], 'test3': ['fail', 'fail'], 'test4': [], 'test5': ['pass'], 'test6': ['pass', 'pass']}

如果你不熟悉听写的理解,这可能更容易阅读

您可以*将dict值转换为:


实际上,链映射也是一种映射类型(类似于dict的API),因此您可能根本不需要外部dict调用。如果您希望保留顺序,那么请使用中的值来显示。

您可以在dict comprehension中嵌套循环

dict2 = {k: v for d in dict1.values() for k, v in d.items()}
上述一个衬垫大致相当于

dict2 = {}
for d in dict1.values():
    for k, v in d.items():
        dict2[k] = v

这不正是我发布的吗?我刚刚也得到了一个@wim,很可能是,尽管RoadRunner已经提供了一个dict理解的解决方案:)
dict2 = {k: v for d in dict1.values() for k, v in d.items()}
dict2 = {}
for d in dict1.values():
    for k, v in d.items():
        dict2[k] = v