如何使用 list *args 到字典创建函数?
How to create function using list *args to a dictionary?
您好,我正在尝试编写一个函数,该函数采用可变数量的列表,其中可以包含任意数量的单词。我希望 return 是一本字典,其中单词是键,值是所有列表中每个单词的总数。
我的代码适用于单个列表:
wl1 = ['double', 'triple', 'int', 'quadruple']
new_dict = {}
for i in range(len(wl1)):
new_dict[wl1[i]] = wl1.count(wl1[i])
和return是这样的:
{'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 变量现在包含一个 list of lists:
[['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
您可以将可变数量的列表合并为一个列表:
def varlist(*items):
items = itertools.chain(*items)
return dict(Counter(items))
您好,我正在尝试编写一个函数,该函数采用可变数量的列表,其中可以包含任意数量的单词。我希望 return 是一本字典,其中单词是键,值是所有列表中每个单词的总数。
我的代码适用于单个列表:
wl1 = ['double', 'triple', 'int', 'quadruple']
new_dict = {}
for i in range(len(wl1)):
new_dict[wl1[i]] = wl1.count(wl1[i])
和return是这样的:
{'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 变量现在包含一个 list of lists:
[['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
您可以将可变数量的列表合并为一个列表:
def varlist(*items):
items = itertools.chain(*items)
return dict(Counter(items))