有没有更优雅的方式来编写这段代码?
我在做什么:我有钥匙和日期。可以有多个日期分配给一个键,因此我正在创建一个日期列表字典来表示它。下面的代码工作正常,但我希望有一个更优雅和 Pythonic 的方法。
dates_dict = dict()
for key, date in cur:
if key in dates_dict:
dates_dict[key].append(date)
else:
dates_dict[key] = [date]
我期望下面的内容能够工作,但是我不断收到 NoneType has no attributeappend 错误。
dates_dict = dict()
for key, date in cur:
dates_dict[key] = dates_dict.get(key, []).append(date)
这可能与以下事实有关:
print([].append(1))
None
but why?
list.append
回报None
,因为它是就地操作,并且您将其分配回dates_dict[key]
。所以,下次当你这么做的时候dates_dict.get(key, []).append
你实际上在做None.append
。这就是它失败的原因。相反,你可以简单地做
dates_dict.setdefault(key, []).append(date)
但是,我们有collections.defaultdict https://docs.python.org/2/library/collections.html#collections.defaultdict仅用于此目的。你可以做这样的事情
from collections import defaultdict
dates_dict = defaultdict(list)
for key, date in cur:
dates_dict[key].append(date)
这将创建一个新的列表对象,如果key
字典中没有找到。
Note:自从defaultdict
如果在字典中找不到该键,将创建一个新列表,这会产生意想不到的副作用。例如,如果您只是想检索键的值,但该值不存在,它将创建一个新列表并返回它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)