从列表的子集创建字典

问题描述 投票:0回答:3

假设我有这样的Python列表:

master_list = ['a_1', 'b_4', 'd_2', 'c_3', 
              'a_2', 'c_1', 'd_4', 'b_3', 
              'd_3', 'c_2', 'a_4', 'b_1', 
              'c_4', 'a_3', 'b_1', 'd_1']

列表中的每一项都是字母、下划线和数字。我想要一本字典来按列表中的数字对这些项目进行分组,如下所示:

 my_dict = {'1': [], '2': [], '3': [], '4':[]}

虽然我可以使用以下内容来填充我的列表

my_dict
,但这似乎很尴尬。有没有更有效的方法来实现这一目标?

for item in master_list:
    if '_1' in item:
        my_dict['1'].append(item)
    elif '_2' in item:
        my_dict['2'].append(item)
    elif '_3' in item:
        my_dict['3'].append(item)
    elif '_4' in item:
        my_dict['4'].append(item)
python list dictionary nested
3个回答
2
投票

您可以使用内置的

split
功能将输入项拆分为
_
字符。

sortd_dict = {}
def add_in_dict(k, v):
    if k not in d:
        sortd_dict[k] = [v]
    else:
        sortd_dict[k].append(v)

for item in master_list:
    add_in_dict(item.split("_")[-1], item)

1
投票

拆分索引并使用它附加到右侧列表:

sortd_dict[item.split('_')[1]].append(item)

1
投票

groupby

from itertools import groupby

sort_func = lambda x: x[2]
master_list = sorted(master_list, key=sort_func)
res = {key: list(group) for (key, group) in groupby(master_list, key=sort_func)}
print(res)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.