Python 用于将字典值转换为单独字典的单行程序
我有一本字典dict1,它的值也是字典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 =
{
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