返回一个字典,其中包含一个单词的第一个字母和这些单词的列表?

时间:2017-11-15 00:49:54

标签: python-3.x loops

我想编写一个函数,它接受单词和键列表,并将这些键作为字典键输出,并附带以该字母开头的任何单词。 如何使用简单的python 3代码实现这一目标?

例如。需要(['apples', 'apple', 'bananna', 'fan'], 'fad')

返回{'a' : ['apple', 'apples'], 'f' : ['fan']}

到目前为止,我已经尝试过:

def dictionary(words, char_keys)
char_keys = remove_duplicates(char_keys)
ret = {}
keys_in_dict = []
words = sorted(words)
for word in words:
    if word[0] in char_keys and word[0] not in keys_in_dict:   
        ret[word[0]] = word
        keys_in_dict.append(word[0])
    elif word[0] in keys_in_dict:
        ret[word[0]] += (word)
return ret

这给了一个正确的输出,但它输出是一个字符串而不是一个字符串列表。(我知道def没有正确缩进)

2 个答案:

答案 0 :(得分:2)

如果输入是一个字符串列表,你可以检查字符串是否在dict中,如果是,则附加单词,否则添加一个带有单词的列表:

def dictionary(inpt):
    result = {}
    for word in inpt:
        char = word[0]
        if char in result:
            result[char].append(word)
        else:
            result[char] = [word]
    return result

这样做的现代方法是使用collections.defaultdict list作为参数。

def dictionary(inpt):
    result = defaultdict(list)
    for word in inpt:
        result[word[0]].append(word)
    return result

答案 1 :(得分:1)

不确定您的输入列表是否仅包含字符串,或者它还可以包含字符串的子列表(我不确定为什么“fad”在您的示例中消失)。显然,在后一种情况下,它需要更多的努力。为简单起见,我假设如果只包含字符串,这里有一段希望指向方向的代码:

d = {}
for elem in input_list[0]:
    if elem[0] in input_list[1]
        lst = d.get(elem[0], [])
        lst.append(elem)
        d[elem] = lst