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]

我读了《思考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]
        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']}

分享你在上面的代码中遇到的问题。修复你的缩进级别,这将解决你的问题。下面的答案有帮助吗?如果是这样,请随意接受(左边绿色勾选),或者您可以要求澄清。