当我尝试反转字典python时不清楚错误

时间:2016-12-12 22:48:28

标签: python dictionary

这是我的代码:

my_dict = {'Anthony Hopkins': ' Hannibal, The Edge, Meet Joe Black, Proof', 'Julia Roberts': ' Pretty Woman, Oceans Eleven, Runaway Bride', 'Salma Hayek': ' Desperado, Wild Wild West', 'Gwyneth Paltrow': ' Shakespeare in Love, Bounce, Proof', 'Meg Ryan': ' You have got mail, Sleepless in Seattle', 'Russell Crowe': ' Gladiator, A Beautiful Mind, Cinderella Man, American Gangster' .....}

dictrev={}

for i in mydict:
    for j in mydict[i] :
        if j not in dictrev:
           dictrev.setdefault(j, []).append(i)
print (dictrev)

问题在于,当我调试时,我看到程序只读取一个字符值(此行for j in mydict[i] :,我需要第一个值(有多个值)。

有什么建议是什么问题 非常感谢你的帮助

3 个答案:

答案 0 :(得分:0)

请你这样格式化你的代码:

do whatever

您可以通过输入两次输入,然后为每行代码缩进四个空格来完成此操作。要在此之后正常输入,请开始一个新行,不要在它的开头键入四个空格。

如果我理解你的要求,你想要交换字典的键和值,这样做会出错。我无法阅读你的无格式代码(没有冒犯),所以我将提供一个适合我的字典交换技术。

my_dict = {1: "bob", 2: "bill", 3: "rob"}
new_dict = {}

for key in my_dict:
    new_key = my_dict[key]
    new_value = key
    new_dict.update({new_key:new_value})

print(new_dict)

此代码的工作原理是使原始字典my_dict和未完成的反向字典new_dict。它遍历my_dict,它只提供密钥,并使用该密钥找到值。我们希望成为密钥的值已分配给new_key,而我们希望成为值的密钥将分配给new_value。然后它使用新的键/值更新反向字典。最后一行打印出新的反向字典。如果要将my_dict设置为反转字典,请使用my_dict = new_dict。我希望这能回答你的问题。

答案 1 :(得分:0)

正如评论中指出的那样,dict中的值是字符串,因此迭代它们将产生单个字符。将它们拆分成所需的标记,它将起作用:

dictrev={}  # movie: actors-list  (I assume)

for k in mydict:
    for v in mydict[k].split(', '):  # iterate through the comma-separated titles
        dictrev.setdefault(v, []).append(k)

答案 2 :(得分:0)

如果您想要的是与您的字典值相反(以逗号分隔),则以下可能是您正在寻找的解决方案:

my_dict = {
    'Anthony Hopkins': ' Hannibal, The Edge, Meet Joe Black, Proof',
    'Julia Roberts' : ' Pretty Woman, Oceans Eleven, Runaway Bride'
}
res_dict {}

for item in my_dict:
    res_dict[item] = ', '.join(reversed(my_dict[item].strip().split(','))).strip()

strip()用于删除每个值的开头/结尾的空格

split()用于拆分值(使用,分隔符)

reversed()用于撤销结果列表

join()用于形成res_dict

的每个键的最终值

<强>输出:

>>> res_dict
{'Anthony Hopkins': 'Proof,  Meet Joe Black,  The Edge, Hannibal', 'Julia Roberts': 'Runaway Bride,  Oceans Eleven, Pretty Woman'}