我有字典:
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']
我想创建一个新字典,将我dicocategory的键作为新键,并将列表中的项作为值。 为了获得新字典的键(删除重复的内容并适应列表),我做了:
def tablemain(my_list ):
tableheaders = list()
for value in my_list:
tableheaders.append([k for k, v in dicocategory.items() if value in v])
convertlist = [j for i in tableheaders for j in i]
headerstablefinal = list(set(convertlist))
return headerstablefinal
给我:
['e', 'a', 'c']
我的问题是:我不知道如何将列表项放在相应的键中。
编辑: 吼叫我想要的输出
{"a" : ['Killian'], 'c' : ['Georges', 'poca', 'nowak'], 'e' : ['makenkosapo']}
列表my_list可以更改,因此我希望可以创建新词典的内容与列表无关。 如果我的新列表是:
my_list = ['crapow', 'german', 'pauk']
我的输出将是:
{'a':['crapow', 'pauk'], 'c':['german']}
你有什么主意吗? 谢谢
答案 0 :(得分:2)
您可以使用几个字典理解。计算第一个,然后在第二个中删除交集为空的实例:
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}
答案 1 :(得分:0)
您可以获得一个字典,其中仅包含键值与列表相匹配的键,如下所示:
{k:v for k,v in dicocategory.items() if set(v).intersection(set(my_list))}
尽管列表的长度不同,但是您无法将其直接放入DataFrame中。