关于python:列出字母表中的字母。希望为每个将包含项的字母制作buckets

Have a list of the letters in the alphabet. Want to make buckets for each letter that will contain items

1
2
from string import ascii_lowercase
index_display = [letter for letter in ascii_lowercase]

在这里,列表被创建并存储在变量索引显示中。

我现在正试图浏览这个列表,为每个字母创建一个存储桶。这些存储桶将包含项目列表。

到目前为止我拥有的是

1
buckets = dict(enumerate(index_display))

实际上,我有一个for循环中的枚举。for循环将遍历具有key='state'的合作伙伴列表。然后我想取状态值的字母,以便将每个合作伙伴分组到给定字母的桶中。基本上按字母顺序组织合作伙伴。

这里是for循环,我希望将每个合作伙伴包括在各自的bucket中,这取决于它们的状态键值的第一个字母。

1
 for partner in partners_by_state:

我这里有合作伙伴的元组示例:

1
2
Partner(state="Texas", name="beautiful", logo="beautiful.png",
link="http:hi.com"),

我也有州名单。

1
2
3
4
5
   states = {'alabama': '',
              'arizona': '',
              'california': '',

          },

以及这个代码

1
2
3
4
5
6
7
8
9
10
11
12
partners_by_state = {}
    for partner in partner_list:
        raw_state_state_name = partner.state
        state_key = raw_state_state_name.lower()
        found_value = partners_by_state.get(state_key)
        if not found_value:
            partners_by_state[state_key] = []
        partners_by_state[state_key].append(partner)

    for state, parts in partners_by_state.items():
        new_parts = sorted(parts, key=lambda x: x.name)
        partners_by_state[state] = new_parts

我真的很感激能得到任何帮助!


更新问题的新答案

使用defaultdict

1
2
3
from collections import defaultdict

partners_by_state = defaultdict(list)

现在可以不使用if语句追加:

1
2
3
4
for partner in partner_list:
       raw_state_state_name = partner.state
       state_key = raw_state_state_name.lower()[0] # first letter
       partners_by_state[state_key].append(partner)

问题第一部分的旧答案

您可能需要一个列表为值的字典:

1
2
3
from string import ascii_lowercase

buckets = {letter: [] for letter in ascii_lowercase}