gpt4 book ai didi

python - 将冗余数组转换为字典(或 JSON)?

转载 作者:太空狗 更新时间:2023-10-29 20:27:10 25 4
gpt4 key购买 nike

假设我有一个数组:

[['a', 10, 1, 0.1],
['a', 10, 2, 0.2],
['a', 20, 2, 0.3],
['b', 10, 1, 0.4],
['b', 20, 2, 0.5]]

我想要一个 dict(或 JSON):

{
'a': {
10: {1: 0.1, 2: 0.2},
20: {2: 0.3}
}
'b': {
10: {1: 0.4},
20: {2: 0.5}
}
}

这个任务有什么好的方法或一些库吗?
在此示例中,数组只有 4 列,但我的原始数组更复杂(7 列)。

目前我天真地实现了这个:

import pandas as pd
df = pd.DataFrame(array)
grouped1 = df.groupby('column1')
for column1 in grouped1.groups:
group1 = grouped1.get_group(column1)
grouped2 = group1.groupby('column2')
for column2 in grouped2.groups:
group2 = grouped2.get_group(column2)
...

defaultdict方式:

d = defaultdict(lambda x: defaultdict(lambda y: defaultdict ... ))
for row in array:
d[row[0]][row[1]][row[2]... = row[-1]

但我认为两者都不聪明。

最佳答案

我会建议这个相当简单的解决方案:

from functools import reduce

data = [['a', 10, 1, 0.1],
['a', 10, 2, 0.2],
['a', 20, 2, 0.3],
['b', 10, 1, 0.4],
['b', 20, 2, 0.5]]

result = dict()
for row in data:
reduce(lambda v, k: v.setdefault(k, {}), row[:-2], result)[row[-2]] = row[-1]

print(result)
{'a': {10: {1: 0.1, 2: 0.2}, 20: {2: 0.3}}, 'b': {10: {1: 0.4}, 20: {2: 0.5}}}

实际的递归解决方案是这样的:

def add_to_group(keys: list, group: dict):
if len(keys) == 2:
group[keys[0]] = keys[1]
else:
add_to_group(keys[1:], group.setdefault(keys[0], dict()))

result = dict()
for row in data:
add_to_group(row, result)

print(result)

关于python - 将冗余数组转换为字典(或 JSON)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37337214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com