我的字典(cpc_docs
)具有类似的结构
{
sym1:[app1, app2, app3],
sym2:[app1, app6, app56, app89],
sym3:[app3, app887]
}
我的字典有15K键,它们是唯一的字符串。每个键的值是应用程序编号的列表,它们可以显示为多个键的值。
我看过这里[Python: Best Way to Exchange Keys with Values in a Dictionary?,但是由于我的值是一个列表,因此出现错误unhashable type: list
我尝试了以下方法:
res = dict((v,k) for k,v in cpc_docs.items())
for x,y in cpc_docs.items():
res.setdefault(y,[]).append(x)
new_dict = dict (zip(cpc_docs.values(),cpc_docs.keys()))
因为我的值是列表,所以这些工作当然都没有。
我希望值列表中的每个唯一元素及其所有键都作为列表。
类似这样的东西:
{
app1:[sym1, sym2]
app2:[sym1]
app3:[sym1, sym3]
app6:[sym2]
app56:[sym2]
app89:[sym2]
app887:[sym3]
}
一个奖励是根据每个值列表的len来订购新字典。就像这样:
{
app1:[sym1, sym2]
app3:[sym1, sym3]
app2:[sym1]
app6:[sym2]
app56:[sym2]
app89:[sym2]
app887:[sym3]
}
答案 0 :(得分:1)
您的setdefault
代码差不多在这里,您只需要在值列表上进行一个额外的循环即可:
res = {}
for k, lst in cpc_docs.items():
for v in lst:
res.setdefault(v, []).append(k)
答案 1 :(得分:0)
new_list=[]
for k,v in cpc_docs.items():
for i in range(len(v)):
new_list.append((k,v[i]))
doc_cpc = defaultdict(set)
for tup in cpc_doc_list:
doc_cpc[tup[1]].add(tup[0])
可能有很多更好的方法,但这可行。