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 |
我真的很感激能得到任何帮助!
更新问题的新答案
使用
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} |