使用非唯一值反转字典

时间:2015-01-20 15:41:15

标签: python dictionary

我想用非唯一值反转字典。我收到错误(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']}

5 个答案:

答案 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