gpt4 book ai didi

python - 将列表列表转换为Python中的字典字典

转载 作者:IT老高 更新时间:2023-10-28 20:43:42 25 4
gpt4 key购买 nike

我正在尝试将列表数据结构的列表转换为字典字典。

列表定义如下:

l = [
['PP','Ear-rings', 'Holesovice', 2000],
['PP','Skirts', 'Holesovice', 1000],
['PP','Dresses', 'E-shop', 1500],
['BM','Butterfly', 'Holesovice', 1600]
]

我的目标是字典结构如下:

#{'PP' : {'Holesovice' : {'Ear-rings' : 2000, 'Skirts' : 1000},
# 'E-shop' : {'Dresses' : 1500}},
# 'BM' : {'Holesovice' : {'Butterfly' : 1600}}
#}

这段代码没有返回想要的输出:

labels_d = {}
items_d = {}
shops_d = {}

for index, row in enumerate(l):
items_d[row[1]] = row[3]
shops_d[row[2]] = items_d
labels_d[row[0]] = shops_d

print(labels_d)

我发现了一些关于将列表转换为字典的帖子 herehere但我没有让它按我想要的方式工作。是否有任何“干净”的方式来实现上面发布的结构?

最佳答案

使用 dict.setdefault(key, {})是创建固定深度的嵌套字典的好方法。

l = [
['PP','Ear-rings', 'Holesovice', 2000],
['PP','Skirts', 'Holesovice', 1000],
['PP','Dresses', 'E-shop', 1500],
['BM','Butterfly', 'Holesovice', 1600]
]

d = {}

for tag, item, source, qty in l:
d.setdefault(tag, {}).setdefault(source, {})[item] = qty

输出

{'BM': {'Holesovice': {'Butterfly': 1600}},
'PP': {'E-shop': {'Dresses': 1500},
'Holesovice': {'Ear-rings': 2000, 'Skirts': 1000}}}

概括

通过构建一个嵌套字典类,可以使上述解决方案更通用,放弃具有固定深度的要求。

class NestedDict(dict):
def __getitem__(self, item):
if item not in self:
self[item] = NestedDict()
return super().__getitem__(item)

d = NestedDict()

for tag, item, source, qty in l:
d[tag][source][item] = qty

还要注意,类方法是创建的,所以它只在键不存在时创建一个对象,而 setdefault 方法在每次访问时都会创建一个空的 dict

关于python - 将列表列表转换为Python中的字典字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52186918/

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