有没有更优雅的方法来编写这段代码?
我在做什么:我有钥匙和日期。可以为一个键指定多个日期,因此我正在创建一个日期列表字典来表示这一点。下面的代码运行良好,但我希望有一个更优雅和Python方法。
dates_dict = dict()
for key, date in cur:
if key in dates_dict:
dates_dict[key].append(date)
else:
dates_dict[key] = [date]
我本来希望下面的代码能正常工作,但是我一直得到一个NoneType没有属性追加错误。
dates_dict = dict()
for key, date in cur:
dates_dict[key] = dates_dict.get(key, []).append(date)
这可能与以下事实有关
print([].append(1))
None
但为什么呢?
dates_dict[key] = dates_dict.get(key, []).append(date)
将dates_dict[key]
设置为None
,因为list.append
返回None
。你应该使用collections.defaultdict
list.append
返回None
,因为它是一个就地操作,并且您将其分配回dates_dict[key]
。所以,下次当你做dates_dict.get(key, []).append
的时候,你实际上是在做None.append
。这就是它失败的原因。相反,你可以简单地但是,我们只有这个目的。你可以这样做
如果在字典中找不到
key
,这将创建一个新的列表对象。注意:由于
defaultdict
将创建一个新列表如果在字典中找不到该键,这将产生意想不到的副作用。例如,如果您只想检索不存在的键的值,它将创建一个新列表并返回该值。使用collections.defaultdict:
相关问题 更多 >
编程相关推荐