如何将嵌套列表(python)分组到字典中?
我有一个Python中的列表列表,我想将它们压缩到一个更加连贯有序的字典中如何将嵌套列表(python)分组到字典中?,python,list,dictionary,grouping,Python,List,Dictionary,Grouping,我有一个Python中的列表列表,我想将它们压缩到一个更加连贯有序的字典中 map_ = {} # Note the trailing instead of leading underscore here for sub_list in big_list: dct = map_ for item in sub_list: # Retrieve existing sub dict, or create a new one dct = dct.se
map_ = {} # Note the trailing instead of leading underscore here
for sub_list in big_list:
dct = map_
for item in sub_list:
# Retrieve existing sub dict, or create a new one
dct = dct.setdefault(item, {})
print(map_)
数据的格式如下:
[
['1_1', '2_1', '3_1', '4_1'],
['1_1', '2_1', '3_2', '4_1'],
['1_1', '2_2', '3_1', '4_1'],
['1_1', '2_2', '3_1', '4_2'],
['1_1', '2_2', '3_1', '4_3'],
['1_1', '2_2', '3_2', '4_1', '5_1'],
['1_1', '2_2', '3_2', '4_2', '5_1'],
['1_1', '2_2', '3_2', '4_2', '5_2'],
and so on...
]
最终,我想要得到的是某种字典结构,通过遍历列表,在第一、第二、第三等级别根据相同的项目进行分类
我一直在玩groupby
,以尝试以下代码:
_map = OrderedDict()
for key, group in groupby(big_list, lambda x: x[0]):
_map[key] = [l[1:] for l in group]
这适用于第一个级别,但我一直在研究如何在结构中递归,以便在逐步深入的级别上进行相同类型的分组
任何想法都将不胜感激
编辑:从反对票来看,我想这不是一个好问题?我认为从我的描述中可以清楚地看到预期的输出,但明确地说,我在寻找一棵与Delgan的代码生成的树非常相似的树:
{'1_1': {'2_1': {'3_1': {'4_1': {}}, '3_2': {'4_1': {}}},
'2_2': {'3_1': {'4_1': {}, '4_2': {}, '4_3': {}},
'3_2': {'4_1': {'5_1': {}},
'4_2': {'5_1': {},
'5_2': {}}
}
}
}
}
你真的不需要
这可能要简单得多:只需在遍历数据的同时迭代地填充字典
你也可以使用方便。这样可以避免检查嵌套字典中是否已经存在密钥
map_ = {} # Note the trailing instead of leading underscore here
for sub_list in big_list:
dct = map_
for item in sub_list:
# Retrieve existing sub dict, or create a new one
dct = dct.setdefault(item, {})
print(map_)
这实际上是在创造一个新的环境。叶元素是空字典,可以稍后填充。您没有提供预期的输出,因此很难说……您根本不清楚自己的意思。你在数据中看到的结构并不清晰,除非你解释它或给出输入和输出的示例。感觉你拥有的数据最好以树状结构进行分类/分割。你的树根将是“1_1”。它将有两个孩子:“2_1”和“2_2”等等。对于每个新列表,您将在相应的分支下创建一个节点。这样,您的数据将按层次分类。@StevenRumbalski我不理解您的说法。此代码根据输入子列表创建任意深度的图形。输出就像
{'1_1':{'2_2':{'3_1':{'4_3':{}…}
。很公平。我收回我的反对意见。