python3将听写值转换为s

2021-08-02 16:27:20 发布

您现在位置:Python中文网/ 问答频道 /正文

所以说我有我的字典

In [80]: dict_of_lists
Out[80]: 
{'Marxes': ['Groucho', 'Chico', 'Harpo'],
 'Pythons': ['Chapman', 'Cleese', 'Gilliam'],
 'Stooges': ['Larry', 'Curly', 'Moe']}

我意识到以后我会把这些值当作集合来处理。如何将字典从值(列表)转换为值(集)结构?你知道吗

这是我尝试过的。你知道吗

In [84]: new_dict = [set(dict_of_lists.values()) for values in dict_of_lists.keys()]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-84-f49792cd81ac> in <module>()
----> 1 new_dict = [set(dict_of_lists.values()) for values in dict_of_lists.keys()]

<ipython-input-84-f49792cd81ac> in <listcomp>(.0)
----> 1 new_dict = [set(dict_of_lists.values()) for values in dict_of_lists.keys()]

TypeError: unhashable type: 'list'

而这相当丑陋的努力。你知道吗

In [83]: for list(dict_of_lists.keys()) in dict_of_lists:
   ....:     set list(dict
dict           dict_of_lists  
   ....:     set(list(dict_of_lists.values()))
   ....:     
  File "<ipython-input-83-08e0645abb2f>", line 1
    for list(dict_of_lists.keys()) in dict_of_lists:
       ^
SyntaxError: can't assign to function call
3条回答
网友
1楼 ·
dict_of_sets = {k:set(v) for k,v in dict_of_lists.items()}

这将提供:

 {'Stooges': {'Curly', 'Larry', 'Moe'}, 'Pythons': {'Cleese', 'Chapman', 'Gilliam'}, 'Marxes': {'Groucho', 'Chico', 'Harpo'}}
网友
2楼 ·

您只需要:

for k, v in d.items():
    d[k] = set(v)

详细说明你的尝试失败的原因:

new_dict = [set(dict_of_lists.values()) for values in dict_of_lists.keys()]

在这行中,您是:

  • 迭代字典的键(良好的开始,尽管您不需要指定.keys(),因为这是迭代字典的默认值)
  • 将每个键分配给名称values(混淆,如果不一定是终端)
  • 然后,对于字典中的每个键,尝试将字典的所有值(即列表列表)转换为一个集合,但您不能这样做(列表是可变的,不可散列,因此不能是字典键或集合元素);最后
  • 试着从结果中列出一个清单,而不是一本字典。你知道吗

然后:

for list(dict_of_lists.keys()) in dict_of_lists:

现在隐式地迭代键,这很好,但是尝试将每个键分配给调用list的结果,再次显式调用keys;实际上,这一行是:

['Marxes', 'Pythons', 'Stooges'] = 'Marxes'

这没有任何意义。你知道吗

网友
3楼 ·

使用听写理解:

>>> x
{'Pythons': ['Chapman', 'Cleese', 'Gilliam'], 'Marxes': ['Groucho', 'Chico', 'Harpo'], 'Stooges': ['Larry', 'Curly', 'Moe']}
>>> y = {k:set(v) for k,v in x.items()}
>>> y
{'Pythons': {'Gilliam', 'Chapman', 'Cleese'}, 'Marxes': {'Groucho', 'Chico', 'Harpo'}, 'Stooges': {'Curly', 'Moe', 'Larry'}}

相关问题