Python 从dict和list创建字典

Python 从dict和list创建字典,python,list,dictionary,set,Python,List,Dictionary,Set,我有一本字典: dicocategory = {} dicocategory["a"] = ["crapow", "Killian", "pauk", "victor"] dicocategory["b"] = ["graton", "fred"] dicocategory["c"] = ["babar", "poca", "german", "Georges", "nowak"] dicocategory["d"] = ["crado", "cradi", "hibou", "distopia

我有一本字典:

dicocategory = {}
dicocategory["a"] = ["crapow", "Killian", "pauk", "victor"]
dicocategory["b"] = ["graton", "fred"]
dicocategory["c"] = ["babar", "poca", "german", "Georges", "nowak"]
dicocategory["d"] = ["crado", "cradi", "hibou", "distopia", "fiboul"]
dicocategory["e"] = ["makenkosapo"]
和一份清单:

my_list = ['makenkosapo', 'Killian', 'Georges', 'poca', 'nowak']
我想创建一个新字典,将我的diocategory的键作为新键,列表中的项作为值。 为了获取我的新dict的密钥(删除重复内容并适应我的列表),我制作了:

给我:

['e', 'a', 'c']
我的问题是:我不知道如何将列表中的项目放入相应的键中

编辑: 大声说出我想要的东西

{"a" : ['Killian'], 'c' : ['Georges', 'poca', 'nowak'], 'e' : ['makenkosapo']}
列表my_list可以更改,因此我想要一些可以创建新词典的内容,而与列表无关。 如果我的新列表是:

my_list = ['crapow', 'german', 'pauk']
我的输出将是:

{'a':['crapow', 'pauk'], 'c':['german']}
你知道吗?
谢谢

您可以得到一个字典,其中只包含与您的列表匹配的值,如下所示:

{k:v for k,v in dicocategory.items() if set(v).intersection(set(my_list))}

由于列表长度不同,您无法将其直接放入数据帧中。

您可以得到一个字典,其中只包含与列表值匹配的键,如下所示:

{k:v for k,v in dicocategory.items() if set(v).intersection(set(my_list))}

由于列表长度不同,您无法将其直接放入数据框中。

您可以使用一些字典理解。在第一个实例中计算交点,在第二个实例中删除交点为空的实例:

my_set = set(my_list)

# calculate intersection
res = {k: set(v) & my_set for k, v in dicocategory.items()}

# remove zero intersection values
res = {k: v for k, v in res.items() if v}

print(res)

{'a': {'Killian'},
 'c': {'Georges', 'nowak', 'poca'},
 'e': {'makenkosapo'}}
更有效地,您可以使用生成器表达式来避免中间字典:

# generate intersection
gen = ((k, set(v) & my_set) for k, v in dicocategory.items())

# remove zero intersection values
res = {k: v for k, v in gen if v}

你可以使用一些字典的理解。在第一个实例中计算交点,在第二个实例中删除交点为空的实例:

my_set = set(my_list)

# calculate intersection
res = {k: set(v) & my_set for k, v in dicocategory.items()}

# remove zero intersection values
res = {k: v for k, v in res.items() if v}

print(res)

{'a': {'Killian'},
 'c': {'Georges', 'nowak', 'poca'},
 'e': {'makenkosapo'}}
更有效地,您可以使用生成器表达式来避免中间字典:

# generate intersection
gen = ((k, set(v) & my_set) for k, v in dicocategory.items())

# remove zero intersection values
res = {k: v for k, v in gen if v}

这是相当混乱的。现在还不清楚你想要的最终结果是什么。此外,根据您最初的字典,您无法从中生成数据帧,因为列表的长度不同。这不清楚。我编辑了它!这是相当混乱的。现在还不清楚你想要的最终结果是什么。此外,根据您最初的字典,您无法从中生成数据帧,因为列表的长度不同。这不清楚。我编辑了它!