python - 如何使用 list *args 创建函数到字典?
问题描述
您好我正在尝试编写一个函数,该函数采用可变数量的列表,这些列表可以包含任意数量的单词。我希望返回的是一个字典,其中单词是键,值是所有列表中每个单词的总数。
我的代码适用于单个列表:
wl1 = ['double', 'triple', 'int', 'quadruple']
new_dict = {}
for i in range(len(wl1)):
new_dict[wl1[i]] = wl1.count(wl1[i])
并返回:
{'double': 1, 'triple': 1, 'int': 1, 'quadruple': 1}
但它不适用于多个列表并显示不可散列的列表类型:
def varlist(*items):
newdict = {}
for i in range(len(items)):
newdict[items[i]] = items.count(items[i])
return (newdict)
我应该使用 **kwargs 来将其编入字典吗?如果是这样,我会使用它们的频率计数将变量列表项更改为字典吗?任何提示都会非常有帮助。
解决方案
根据您拥有的代码,问题出在这一行:
newdict[items[i]] = items.count(items[I])
我测试了函数并传递了几个列表(['foo', 'bar'], ['foo','bad']),问题是 items 变量现在包含一个列表列表:
[['foo', 'bar'], ['foo','bad']]
所以,当你做第一个for
并尝试放入时,newdict
你正在做这样的事情:
newdict[['foo','bar']] = ....
因为您不能将列表用作字典的键,所以您得到了“不可散列的列表类型”
您可以做的是将所有列表合并到一个主列表中:
master_list = [word for sublist in items for word in sublist]
这是修改后的版本:
def varlist(*items):
newdict = {}
master_list = [word for sublist in items for word in sublist]
for i in range(len(master_list)):
newdict[master_list[i]] = master_list.count(master_list[i])
return newdict
推荐阅读
- c++ - 如何从具有较低对齐保证的api分配对齐的内存?
- cobol - Cobol:当 End Perform 存在时,语句未由 End Perform 结束
- bash - 将 stderr 和 stdout 重定向到 2 个不同的变量
- python - 为什么我的 sqlite 代码无法识别我的表格?不和谐.py
- ios - 如何将 Google 登录与 Realm iOS SDK 集成
- angular - 查询firebase .startAfter今天的日期
- c# - 以空/空字符串作为参数调用控制器操作
- javascript - 如何将主体的背景颜色更改为线性渐变颜色
- asp.net-core - 通过团队城市云构建自动化和部署
- python - 为什么添加'sort(key = len,reverse = True))'到列表将函数的输出从列表更改为无