首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'NoneType‘对象没有属性’追加‘

'NoneType‘对象没有属性’追加‘
EN

Stack Overflow用户
提问于 2016-09-23 10:09:25
回答 3查看 4.1K关注 0票数 0

我有两个列表,我要合并到字典里

代码语言:javascript
复制
keys = ['p2p', 'groupchat']
tests_available = ['p2p_1', 'p2p_2', 'p2p_3', 'groupchat_1', 'groupchat_2']

预期的输出将类似于

代码语言:javascript
复制
{'p2p': ['p2p_1', 'p2p_2', 'p2p_3'], 'groupchat': ['groupchat_1', 'groupchat_2']
}

下面是我创建字典的代码。

代码语言:javascript
复制
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’。有人能帮我找出我的代码有什么问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-23 10:20:25

如果使用defaultdict,则追加调用将以值类型默认值的形式工作:

代码语言:javascript
复制
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

票数 4
EN

Stack Overflow用户

发布于 2016-09-23 10:12:20

除非显式设置值,否则在Your键中将值设置为None:

从键(seq,值)

创建一个新字典,其中包含来自seq的键和设置为value的值。that键()是返回新字典的类方法。值默认为无。

在这种情况下,您需要为每个键创建作为值的列表:

代码语言:javascript
复制
d = {k:[] for k in keys}

还可以使用dict进行if检查:

代码语言:javascript
复制
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键,但它必须是不可变的,否则您将在所有键之间共享同一个对象。

票数 3
EN

Stack Overflow用户

发布于 2016-09-23 10:14:41

对于少量的键/测试,字典的理解也是有效的:

代码语言:javascript
复制
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}

演示:

代码语言:javascript
复制
>>> out
{'groupchat': ['groupchat_1', 'groupchat_2'], 'p2p': ['p2p_1', 'p2p_2', 'p2p_3']}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39658150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档