我正在尝试制作一个字典,该字典将列表中出现的字符串的长度作为键,然后将出现的次数作为值。
例如,如果我有此列表:
x = ['ABC','GOOGLE','BCD','GOOGLY', 'A','A']
字典结果看起来像这样:
d = {3:2, 6:2, 1:2}
键3表示在列表中,索引的长度为3,出现了2次(“ ABC”和“ BCD”)。
这是我能想到的最好的尝试:
d = {len(x.count()):len(x.count()) for (key, value) in x} #wrong
我该怎么做?
感谢您的帮助!
答案 0 :(得分:2)
在x
中创建一个字符串长度的Counter
对象
from collections import Counter
x = ['ABC','GOOGLE','BCD','GOOGLY', 'A','A']
length_counts = Counter(len(word) for word in x)
print(length_counts)
# Counter({3: 2, 6: 2, 1: 2})
如果需要,可以将其转换为字典。
print(dict(length_counts))
# {3: 2, 6: 2, 1: 2}
答案 1 :(得分:1)
您可以分2个步骤进行操作,首先创建单个项目的长度列表,然后从计数列表中创建字典。
c = [len(item) for item in x]
d = {item:c.count(item) for item in c}
答案 2 :(得分:1)
似乎很多人都在回答这个问题,但我想也要投入2美分。
x = ['ABC','GOOGLE','BCD','GOOGLY', 'A','A']
def make_object(arr):
lengths = (len(item) for item in arr);
obj = {}
for item in lengths:
obj[item] = obj[item] + 1 if item in obj else 1
return obj
make_object(x)
答案 3 :(得分:0)
这应该有效
from collections import Counter
x = ['ABC','GOOGLE','BCD','GOOGLY', 'A','A']
dic =Counter(list(map(len,x)))
print(dic)
答案 4 :(得分:0)
Counter
绝对是Python中的最佳答案。更具功能性语言风格的答案应如下所示(Python 3.5或更高版本):
from functools import reduce
x = ['ABC','GOOGLE','BCD','GOOGLY', 'A','A']
length_counts = reduce(lambda accum, s: {**accum, len(s): accum.get(len(s), 0) + 1}, x, {})
或
from functools import reduce
x = ['ABC','GOOGLE','BCD','GOOGLY', 'A','A']
length_counts = reduce(lambda accum, i: {**accum, i: accum.get(i, 0) + 1}, map(len, x), {})
这种通用方法在不同语言之间具有更高的可移植性(但是在这个特定问题中,Counter
绝对是正确的答案)。
答案 5 :(得分:0)
如何?
from itertools import groupby
d = dict()
for k, v in groupby(sorted(map(len, x))):
d[k] = len(list(v))
{1: 2, 3: 2, 6: 2}
答案 6 :(得分:0)
一种简单的方法:
from collections import defaultdict
x = ['ABC','GOOGLE','BCD','GOOGLY', 'A','A']
print x
d = defaultdict(int)
for a in x:
d[len(a)] += 1
print d
输出:
['ABC', 'GOOGLE', 'BCD', 'GOOGLY', 'A', 'A']
defaultdict(<type 'int'>, {1: 2, 3: 2, 6: 2})