Getting "TypeError: 'builtin_function_or_method' object is not iterable" when trying to reverse dictionary with non-unique values

Getting "TypeError: 'builtin_function_or_method' object is not iterable" when trying to reverse dictionary with non-unique values

我想用非唯一值反转字典。我收到错误:

TypeError: 'builtin_function_or_method' object is not iterable

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']}

您在 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']}

调用函数my_dict1.items()。您只是在那里有一个函数对象,因此出现了错误。那就是线

for k,v in my_dict1.items:

应该是:

for k,v in my_dict1.items():

调用方法需要加括号

此外,您可以使用 defaultdict:

from collections import defaultdict
my_dict2 = defaultdict(list)
for k,v in my_dict1.iteritems():
    my_dict2[v].append(k)

print my_dict2
# defaultdict(<type 'list'>, {'A': ['House', 'Apartment'], 'B': ['Condo']})

同样对于 python2 你应该使用 iteritems().

这是另一种方法。

这个函数使用了字典的setdefault方法,所以如果还没有定义,它会创建一个键。

def invert(d):
    res = {}
    {res.setdefault(v, []).append(k) for k, v in d.items()}
    return res

您可以使用以下一行:

{v: [k for k, v2 in a.items() if v2 == v] for v in set(a.values())}