创建以字符串长度为键,字符串为值的字典
Create dictionary with length of string as key and string as value
我有一个包含随机字符串的列表,如下所示:
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(dict_of_len) 等于 4。我做错了什么?
我想要的是:
{4: 'zone', 7: 'abigail', 5: 'theta', 4: 'form', 4: 'libe', 3: 'zas'}
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
解决方案的替代方案,您可以使用 defaultdict
或使用 setdefault
来简洁地累积值列表:
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
解决方案没有错,只要你不介意排序。
我有一个包含随机字符串的列表,如下所示:
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(dict_of_len) 等于 4。我做错了什么?
我想要的是:
{4: 'zone', 7: 'abigail', 5: 'theta', 4: 'form', 4: 'libe', 3: 'zas'}
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
解决方案的替代方案,您可以使用 defaultdict
或使用 setdefault
来简洁地累积值列表:
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
解决方案没有错,只要你不介意排序。