python使用字符串列表作为值创建字典

时间:2017-03-16 02:08:41

标签: python list dictionary

我确信这可以做到,但到目前为止我还没有成功:

我有一个字符串列表。我想创建一个字典,其中所述字符串的长度(可以表示为范围)作为键,字符串本身作为值。

例如: 这里有类似我的列表:[' foo',' bar',' help',' this',&& 39; #39;人']

我想最终得到这样的字典: {3:[' foo',' bar',#39; guy],4:['此',' help'] }

6 个答案:

答案 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

collectiondict的子类,它会自动将值初始化为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)