我确信这可以做到,但到目前为止我还没有成功:
我有一个字符串列表。我想创建一个字典,其中所述字符串的长度(可以表示为范围)作为键,字符串本身作为值。
例如: 这里有类似我的列表:[' foo',' bar',' help',' this',&& 39; #39;人']
我想最终得到这样的字典: {3:[' foo',' bar',#39; guy],4:['此',' help'] }
答案 0 :(得分:6)
使用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']})
答案 1 :(得分:2)
您可以将字典用作# filenames & MIMEtypes
DST_FILENAME = 'inventory'
SRC_FILENAME = DST_FILENAME + '.csv'
SHT_MIMETYPE = 'application/vnd.google-apps.spreadsheet'
CSV_MIMETYPE = 'text/csv'
# Import CSV file to Google Drive as a Google Sheets file
METADATA = {'name': DST_FILENAME, 'mimeType': SHT_MIMETYPE}
rsp = DRIVE.files().create(body=METADATA, media_body=SRC_FILENAME).execute()
if rsp:
print('Imported %r to %r (as %s)' % (SRC_FILENAME, DST_FILENAME, rsp['mimeType']))
的容器:
setdefault
答案 2 :(得分:1)
你可以这样做:
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]
答案 3 :(得分:1)
这个解决方案是pythonic,优雅和快速:(由着名的 Raymond Hettinger 在他的许多conferences之一)。
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']}
此解决方案是上述解决方案的现代方式:
来自defaultdict
的 collection
是dict
的子类,它会自动将值初始化为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']})
答案 4 :(得分:0)
与上述内容类似,但使用get
类的dict
方法:
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']}
答案 5 :(得分:0)
另一种方法:
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)