问题描述
我正在尝试理解以下Python行:result = {'key_A': [*dict_A.keys()],'key_B': "dummy_string"}
结果是字典,在Result ['key_A']中保存一个列表,在Result ['key_b']中保存字符串。但是我不确定为什么必须将dict_A.keys()解压缩,而只将其重新放入列表中。进行这种额外的拆箱操作是否有原因?
解决方法
在Python 3中,def search_article
result_articles = Article.search params[:search],suggest: true,fields: %i[title body author.name status],page: params[:page],per_page: params[:per_page]
render json: { result_articles: result_articles,time: result_articles.took,suggestion:
result_articles.suggestions }
end
不返回列表,而是返回.keys
对象,因此,如果需要dict_keys
,则必须对其进行转换。
list
等同于[*dict_A.keys()]
dict.keys()函数返回一个view object,它代表对字典所做的更改。
简单地说,更改字典会影响键的对象。 例如:
a = {'a':1,'b':2}
b = a.keys()
print(b)
a['c'] = 3
print(b)
Out:
dict_keys(['a','b'])
dict_keys(['a','b','c'])
因此,为了保持词典键的当前状态,请转换为列表。
,解包运算符可用于解压缩生成器/对象,因此用户不必执行[key for key in dict_A.keys()]
,而可以使用[*dict_A.keys()]
,因为它将获取生成器的每个项目并将其打包进入列表。这也类似于使用list(dict_A.keys())
。