[英]Creating keys/values from a string by defaultdict
我想通過使用字符串創建默認字典。 假設我有一個單詞“ hello”:我希望函數返回:
{'h':{'e'}, 'e':{'l'}, 'l':{'l', 'o'}}
我嘗試首先創建一個defaultdict(set)來消除所有重復項,但是我不確定如何從字符串中的下一個字母中獲取鍵的值(如果有意義)?
def next(s):
x = defaultdict(set)
for i in range(len(s)-1):
x[i].add(s[i+1]) #this is the part i am unsure about
return x
這返回一個錯誤,告訴我str對象如何不具有“ add”屬性。
您的代碼可以正常工作:
>>> from collections import defaultdict
>>> def next(s):
... x = defaultdict(set)
... for i in range(len(s)-1):
... x[i].add(s[i+1])
... return x
...
>>> next('hello')
defaultdict(<type 'set'>, {0: set(['e']), 1: set(['l']), 2: set(['l']), 3: set(['o'])})
也許您的運行代碼偶然使用了defaultdict(str)
?
您想使用s[i]
作為鍵:
def next(s):
x = defaultdict(set)
for i in range(len(s)-1):
x[s[i]].add(s[i+1])
return x
這將產生所需的輸出:
>>> def next(s):
... x = defaultdict(set)
... for i in range(len(s)-1):
... x[s[i]].add(s[i+1])
... return x
...
>>> next('hello')
defaultdict(<type 'set'>, {'h': set(['e']), 'e': set(['l']), 'l': set(['l', 'o'])})
您還可以將字符串作為迭代器進行循環,以“記住”前一個字符:
def next_dict(s):
x = defaultdict(set)
prev = s[0]
for char in s[1:]:
x[prev].add(char)
prev = char
return x
跟蹤以前的值,而不是向前看要容易得多; 畢竟,您已經跳過了先前的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.