我有一个列表中的值的字典。但是我想把它们从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}}}
这些是我实际数据的摘录,大致是这样的。所以在每个dict
s中都有一组这样的数据(总共是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}}}