簡體   English   中英

python使用字符串列表作為值創建字典

[英]python create dict using list of strings with length of strings as values

我確信這可以做到,但到目前為止我還沒有成功:

我有一個字符串列表。 我想創建一個字典,以所述字符串的長度(可以表示為一個范圍)作為鍵,字符串本身作為值。

示例:這是我擁有的列表:['foo','bar','help','this','guy']

我想最終得到這樣的字典:{3:['foo','bar','guy], 4:['this','help']}

使用defaultdict這樣您就不必檢查是否為新鍵創建列表:

from collections import defaultdict

x = ['foo','bar','help','this','guy']

len_dict = defaultdict(list)

for word in x:
    len_dict[len(word)].append(word)

len_dict
#
# Out[5]: defaultdict(list, {3: ['foo', 'bar', 'guy'], 4: ['help', 'this']})

您可以使用字典作為帶有setdefault的容器:

lst = ['foo','bar','help','this','guy'] 

result = {}   
for w in lst:
    result.setdefault(len(w), []).append(w)

result
# {3: ['foo', 'bar', 'guy'], 4: ['help', 'this']}

你可以這樣做:

d={}
lst=['foo','bar','help','this','guy']
for i in lst:
    if len(i) in d:
        d[len(i)].append(i)
    else:
        d[len(i)]=[i]

這個解決方案是 Pythonic、優雅和快速的:(由著名的Raymond Hettinger在他的眾多會議之一中提出)。

dict.setdefault是字典方法,如果在 dict 中找不到鍵,則初始化鍵值,並為提供的鍵執行dict.get

l = ['foo','bar','help','this','guy']
d = {}
for e in l:
    key = len(e)
    d.setdefault(key, []).append(name)
print(d)

輸出:

{3: ['foo', 'bar', 'guy'], 4: ['help', 'this']}

此解決方案是上述解決方案的現代方式:

collection中的defaultdictdict的子類,它自動將 value 初始化為不在defaultdict中的任何給定鍵。

from collections import defaultdict
l = ['foo','bar','help','this','guy']
d = defaultdict(list)
for e in l:
    key = len(e)
    d[key].append(e)
print(d)

輸出:

defaultdict(<class 'list'>, {3: ['foo', 'bar', 'guy'], 4: ['help', 'this']})

類似於已經說過的,但使用dict類的get方法:

the_list=['foo','bar','help','this','guy']
d = {}
for word in the_list:
  key = len(word)
  d[key] = d.get(key, []) + [word]
print(d)
# {3: ['foo', 'bar', 'guy'], 4: ['help', 'this']}

另一種方法:

from collections import defaultdict
given_list=['foo','bar','help','this','guy']
len_words=[len(i) for i in given_list]
d=defaultdict(list)
for i,j in list(zip(len_words,given_list)):
    d[i].append(j)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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