簡體   English   中英

默認情況下從字符串創建鍵/值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM