将list作为dict中的值更改为dict中的正常值



我有一个列表中的值的字典。但是我想把它们从list变成正常的dict值。它看起来是这样的:

{1: {'A': { 1: [5], 16: [5], 17: [4],
20: [9], 22: [5], 26: [4],
33: [2], 34: [4], 42: [2],
47: [4], 72: [4], 80: [2]}}}

这是预期的输出:(去掉方括号)

{1: {'A': { 1: 5, 16: 5, 17: 4,
20: 9, 22: 5, 26: 4,
33: 2, 34: 4, 42: 2,
47: 4, 72: 4, 80: 2}}}

这些是我实际数据的摘录,大致是这样的。所以在每个dicts中都有一组这样的数据(总共是3*3=9)

{1: {"A": {}, "B": {}, "C":{}},
2: {"A": {}, "B": {}, "C":{}},
3: {"A": {}, "B": {}, "C":{}}}

我看到很多其他的问题把list变成dict的值。但我正试图做相反的(改变我的值为正常值,而不是在list)

如果你看到其他有类似问题的线程,可以指导我,那就太好了。

您需要遍历内部字典,并在每个列表中获得索引0

# solution for your specific case
values = {1: {'A': {1: [5], 16: [5], 17: [4], 20: [9], 22: [5], 26: [4],
33: [2], 34: [4], 42: [2], 47: [4], 72: [4], 80: [2]}}}
values = {1: {'A': {k: v[0] for k, v in values[1]['A'].items()}}}

和任何3级字典的泛型代码

values = {
outerKey: {
innerKey: {k: v[0] for k, v in innerDict.items()}
for innerKey, innerDict in outerDict.items()
} for outerKey, outerDict in values.items()
}

递归解(dct是您的问题字典):

def remove_lists(d):
if isinstance(d, dict):
return {k: remove_lists(v) for k, v in d.items()}
elif isinstance(d, list):
return remove_lists(d[0])
return d

print(remove_lists(dct))

打印:

{1: {'A': {1: 5, 16: 5, 17: 4, 20: 9, 22: 5, 26: 4, 33: 2, 34: 4, 42: 2, 47: 4, 72: 4, 80: 2}}}

最新更新