创建以字符串长度为键、字符串长度为值的字典

2024-03-28 22:36:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个随机字符串列表,如下所示:

strings =  ["zone", "abigail", "theta", "form", "libe", "zas"] 

我想要的是一个字典,其中len的字符串(非唯一的,线性的,因为它们在列表中)作为键,字符串作为值。似乎很平庸,但我试着用一句话来写,找一个更好的方式来写。你知道吗

我试过这个:

dict_of_len = {len(element):element for element in strings} 

但不知怎的,我把它作为一个输出:

{4: 'libe', 7: 'abigail', 5: 'theta', 3: 'zas'}

len等于4。我做错什么了?你知道吗

我想要的是:

{4: 'zone', 7: 'abigail', 5: 'theta', 4: 'form', 4: 'libe', 3: 'zas'}

Tags: 字符串formzone列表len字典方式线性
2条回答

dict键必须是唯一的,解决问题的一个更好的替代解决方案是将长度存储为键(如之前所做的),并将具有该长度的字符串列表存储为值,您可以使用itertools.groupby(这要求数据按其分组依据的条件排序):

strings =  ["zone", "abigail", "theta", "form", "libe", "zas"] 

from itertools import groupby

dict_of_len = {k: list(g) for k, g in groupby(sorted(strings, key = len), len)}

print(dict_of_len)

输出:

{3: ['zas'], 4: ['zone', 'form', 'libe'], 5: ['theta'], 7:['abigail']}

作为需要预排序的groupby解决方案的替代方案,您可以使用defaultdictsetdefault简洁地累积值列表:

from collections import defaultdict
dict_of_len = defaultdict(list)
for str in strings:
    dict_of_len[len(str)].append(str)

或者,使用更古老的成语:

dict_of_len = {}
for str in strings:
    dict_of_len.setdefault(len(str), []).append(str)

但是groupby解决方案没有什么问题,只要您不介意排序。你知道吗

相关问题 更多 >