我想用非唯一值反转字典。我收到错误(TypeError:' builtin_function_or_method'对象不可迭代)
my_dict1={"House": "A", "Apartment": "A", "Condo": "B"}
my_dict2={}
for k,v in my_dict1.items:
my_dict2[v]= my_dict2.get(v,[])
my_dict2[v].append(k)
print my_dict2
所需输出= {'A':['House','Apartment'],'B':['Condo']}
答案 0 :(得分:2)
您在()
上遗漏了items
:
In [78]:
my_dict1={"House": "A", "Apartment": "A", "Condo": "B"}
my_dict2={}
for k,v in my_dict1.items(): #<- missing ()
my_dict2[v]= my_dict2.get(v,[])
my_dict2[v].append(k)
my_dict2
Out[78]:
{'B': ['Condo'], 'A': ['Apartment', 'House']}
答案 1 :(得分:2)
调用函数my_dict1.items()
。你只是在那里有一个函数对象,因此错误。这就是行
for k,v in my_dict1.items:
应该是:
for k,v in my_dict1.items():
答案 2 :(得分:2)
使用defaultdict:
from collections import defaultdict
my_dict2 = defaultdict(list)
for k,v in my_dict1.iteritems(): # add parens to call the method
my_dict2[v].append(k)
print my_dict2
defaultdict(<type 'list'>, {'A': ['House', 'Apartment'], 'B': ['Condo']})
对于python2,你应该使用iteritems()
:
答案 3 :(得分:1)
您可以使用以下单线:
{v: [k for k, v2 in a.items() if v2 == v] for v in set(a.values())}
答案 4 :(得分:0)
这是另一种方式。
此函数使用字典的NgbModule
方法,因此,如果尚未定义键,它将创建一个键。
ng-bootstrap