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