我有这个列表:
list1 = [{'Hello'}, {'Welcome'}, {'BYE'}]
我有一本字典:
dict1 = {'Welcome': 5, 'BYE': 3, 'How are you': 3}
我希望结果是这样的:
dict2 = {'Welcome': 5, 'BYE': 3}
根据这篇帖子。我试过了:
dict2 = {k: dict1[k] for k in (dict1.keys() & list1)}
但上面写着:
类型错误:不可更改类型:"set">
我需要先做list1吗,像这样:
list1 = ['Hello', 'Welcome', 'BYE']
如果这就是问题所在,那么怎么办呢?
您可以从list1
:生成一组值
list1 = [{"Hello"}, {"Welcome"}, {"BYE"}]
dict1 = {"Welcome": 5, "BYE": 3, "How are you": 3}
dict2 = {k: dict1[k] for k in (dict1.keys() & {v for s in list1 for v in s})}
print(dict2)
打印:
{'BYE': 3, 'Welcome': 5}
如果需要从列表列表中那个奇怪的单个项目集开始,我会用itertools.chain.from_iterable
将其展开为一个简单的列表。从那里,通过简单的字典理解,您可以为list1
:中存在的CCD_3中的每个键创建一个新的字典
>>> from itertools import chain
>>> list1 = [{'Hello'}, {'Welcome'}, {'BYE'}]
>>> dict1 = {'Welcome': 5, 'BYE': 3, 'How are you': 3}
>>> list(chain.from_iterable(list1))
['Hello', 'Welcome', 'BYE']
>>> {k: dict1[k] for k in chain.from_iterable(list1) if k in dict1}
{'Welcome': 5, 'BYE': 3}
是的,您的变量list1是集合的列表,您可以这样做:
dict2 = {k: dict1[k] for k in set(dict1.keys()).intersection(set().union(*list1))}