Chr*_*ngj 10 python dictionary
我的任务是创建一个字典,其字符串是在字符串中找到的元素,其值计算每个值的出现次数.
防爆.
"abracadabra" ? {'r': 2, 'd': 1, 'c': 1, 'b': 2, 'a': 5}
Run Code Online (Sandbox Code Playgroud)
我在这里有for循环逻辑:
xs = "hshhsf"
xsUnique = "".join(set(xs))
occurrences = []
freq = []
counter = 0
for i in range(len(xsUnique)):
for x in range(len(xs)):
if xsUnique[i] == xs[x]:
occurrences.append(xs[x])
counter += 1
freq.append(counter)
freq.append(xsUnique[i])
counter = 0
Run Code Online (Sandbox Code Playgroud)
这正是我想要它做的,除了列表而不是字典.我怎样才能使它counter成为一个价值,并xsUnique[i]成为新词典中的关键?
在最简单的方法是使用一个计数器:
>>> from collections import Counter
>>> Counter("abracadabra")
Counter({'a': 5, 'r': 2, 'b': 2, 'c': 1, 'd': 1})
Run Code Online (Sandbox Code Playgroud)
如果你不能使用Python库,你可以使用dict.get和默认值0来制作你自己的计数器:
s="abracadabra"
count={}
for c in s:
count[c] = count.get(c, 0)+1
>>> count
{'a': 5, 'r': 2, 'b': 2, 'c': 1, 'd': 1}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用dict.fromkeys()将计数器中的所有值设置为零,然后使用:
>>> counter={}.fromkeys(s, 0)
>>> counter
{'a': 0, 'r': 0, 'b': 0, 'c': 0, 'd': 0}
>>> for c in s:
... counter[c]+=1
...
>>> counter
{'a': 5, 'r': 2, 'b': 2, 'c': 1, 'd': 1}
Run Code Online (Sandbox Code Playgroud)
如果你真的想要最少的Pythonic,也就是你可能在C中做什么,你可能会这样做:
0例:
ascii_counts=[0]*255
s="abracadabra"
for c in s:
ascii_counts[ord(c)]+=1
for i, e in enumerate(ascii_counts):
if e:
print chr(i), e
Run Code Online (Sandbox Code Playgroud)
打印:
a 5
b 2
c 1
d 1
r 2
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于Unicode,因为您需要超过100万个列表条目...
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |