Python 如何创建值为列表的词典
我读了《思考Python》一书中的一段代码。此代码卡在Python 如何创建值为列表的词典,python,list,dictionary,Python,List,Dictionary,我读了《思考Python》一书中的一段代码。此代码卡在逆[val].[键]处,出现错误: “str”对象没有属性“append” 因为inverse[val]包含一个字符串对象,所以它是有意义的。 这里是输入字典 def invert_dict(d): inverse = dict() for key in d: val = d[key] if val not in inverse: inverse[val] = [key]
逆[val].[键]
处,出现错误:
“str”对象没有属性“append”
因为inverse[val]
包含一个字符串对象,所以它是有意义的。
这里是输入字典
def invert_dict(d):
inverse = dict()
for key in d:
val = d[key]
if val not in inverse:
inverse[val] = [key]
else:
inverse[val].append(key)
return inverse
from collections import defaultdict
d_in = {'a': 1, 'p': 1, 'r': 2, 't': 1, 'o': 1}
d_out = defaultdict(list)
for k, v in d_in.items():
d_out[v].append(k)
print(d_out)
defaultdict(<class 'list'>, {1: ['a', 'p', 't', 'o'], 2: ['r']})
输入字典是{'a':1,'p':1,'r':2,'t':1,'o':1}
预期的输出是{1:['a',p','t','o'],2:['r']}
如何通过修改给定的代码块来实现这一点?您可以使用创建列表字典。然后在迭代输入字典时附加到字典值
def invert_dict(d):
inverse = dict()
for key in d:
val = d[key]
if val not in inverse:
inverse[val] = [key]
else:
inverse[val].append(key)
return inverse
from collections import defaultdict
d_in = {'a': 1, 'p': 1, 'r': 2, 't': 1, 'o': 1}
d_out = defaultdict(list)
for k, v in d_in.items():
d_out[v].append(k)
print(d_out)
defaultdict(<class 'list'>, {1: ['a', 'p', 't', 'o'], 2: ['r']})
试试这个:
def invert_dict(data):
inverse = {}
for key, value in data.items():
if value not in inverse:
inverse[value] = [key]
else:
inverse[value].append(key)
return inverse
使用以下各项的单衬套:
输出:
{1: ['t', 'o', 'p', 'a'], 2: ['r']}
{1: ['a', 'p', 't', 'o'], 2: ['r']}
也可以采用不同的方法,从字典中获取所有值,并将每个值与初始字典中具有此值的键相匹配:
def invert_dict(d):
values = set(d.values())
inverse = dict((v,[k for k in d.keys() if d[k]==v]) for v in values)
return inverse
inv = invert_dict({'a': 1, 'p': 1, 'r': 2, 't': 1, 'o': 1})
print(inv)
输出:
{1: ['t', 'o', 'p', 'a'], 2: ['r']}
{1: ['a', 'p', 't', 'o'], 2: ['r']}
分享你在上面的代码中遇到的问题。修复你的缩进级别,这将解决你的问题。下面的答案有帮助吗?如果是这样,请随意接受(左边绿色勾选),或者您可以要求澄清。