我有两个列表,我要合并到字典里
keys = ['p2p', 'groupchat']
tests_available = ['p2p_1', 'p2p_2', 'p2p_3', 'groupchat_1', 'groupchat_2']预期的输出将类似于
{'p2p': ['p2p_1', 'p2p_2', 'p2p_3'], 'groupchat': ['groupchat_1', 'groupchat_2']
}下面是我创建字典的代码。
out = {}
out = dict.fromkeys(keys)
for tests in tests_available:
if tests.split('_')[0] in keys:
key = tests.split('_')[0]
out[key].append(tests)但是,当它试图将值附加到键时,它会抛出错误'NoneType‘对象没有属性' append’。有人能帮我找出我的代码有什么问题吗?
发布于 2016-09-23 10:20:25
如果使用defaultdict,则追加调用将以值类型默认值的形式工作:
In [269]:
from collections import defaultdict
keys = ['p2p', 'groupchat']
tests_available = ['p2p_1', 'p2p_2', 'p2p_3', 'groupchat_1', 'groupchat_2']
d = defaultdict(list)
for test in tests_available:
k = test.split('_')[0]
if k in keys:
d[k].append(test)
d.items()
Out[269]:
dict_items([('p2p', ['p2p_1', 'p2p_2', 'p2p_3']), ('groupchat', ['groupchat_1', 'groupchat_2'])])见docs:https://docs.python.org/2/library/collections.html#defaultdict-examples
发布于 2016-09-23 10:12:20
除非显式设置值,否则在Your键中将值设置为None:
从键(seq,值)
创建一个新字典,其中包含来自seq的键和设置为value的值。that键()是返回新字典的类方法。值默认为无。
在这种情况下,您需要为每个键创建作为值的列表:
d = {k:[] for k in keys}还可以使用dict进行if检查:
d = {k:[] for k in keys}
for test in tests_available:
k = tests.split('_', 1)[0]
if k in d:
d[k].append(test)您可以将一个值传递给among键,但它必须是不可变的,否则您将在所有键之间共享同一个对象。
发布于 2016-09-23 10:14:41
对于少量的键/测试,字典的理解也是有效的:
keys = ['p2p', 'groupchat']
tests_available = ['p2p_1', 'p2p_2', 'p2p_3', 'groupchat_1', 'groupchat_2']
out = {k: [v for v in tests_available if v.startswith(k)] for k in keys}演示:
>>> out
{'groupchat': ['groupchat_1', 'groupchat_2'], 'p2p': ['p2p_1', 'p2p_2', 'p2p_3']}https://stackoverflow.com/questions/39658150
复制相似问题