有一个字母表中的字母列表。想要为每个包含项目的字母制作存储桶

时间:2017-10-31 18:24:36

标签: python python-3.x

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

此处创建列表并将其存储在变量index_display中。

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

到目前为止,我所拥有的是

buckets = dict(enumerate(index_display))

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

这是我想要的for循环,包括相应存储桶中的每个伙伴,具体取决于哪个是状态键值的第一个字母。

 for partner in partners_by_state:

我在这里为合作伙伴提供元组示例:

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

我也有州名单。

   states = {'alabama': '',
              'arizona': '',
              'california': '',

          },

以及此代码

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 个答案:

答案 0 :(得分:0)

更新问题的新答案

使用defaultdict

from collections import defaultdict

partners_by_state = defaultdict(list)

现在你可以在没有if语句的情况下追加:

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)

问题第一部分的旧答案

你可能想要一个带有列表值的词典:

from string import ascii_lowercase

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