我正在玩Python,试图理解词典。我知道在提出这个错误之前已经提出了一些问题,但它们并没有帮助我理解我的问题。
我有以下代码
mailSender = dict()
count = 0
name = input("Enter file:")
handle = open(name)
for line in handle:
line = line.rstrip()
if not line.startswith("From "):
continue
count = count + 1
senderNames = line.split()
# print(splitLines[1])
print(senderNames[1])
if senderNames not in mailSender:
mailSender[senderNames] = 1
else:
mailSender[senderNames] = mailSender[senderNames] + 1
# print(mailSender)
我正在尝试选择一个文本文件的电子邮件地址,然后查找谁发送了最多的电子邮件。
我一直收到以下错误:
if senderNames not in mailSender: TypeError: unhashable type: 'list'
我没有经验可以看到我哪里出错了,我希望有人可以对此有所了解。
答案 0 :(得分:0)
问题是你正在使用senderNames,这是一个包含From和whatnot的列表,而你可能正在寻找senderNames [1]这个名字。这样的事情 - 尽管你可能想要将一些发送者名称数组合成一个字符串,但不确定你的数据是什么样的。
for line in handle:
line = line.rstrip()
if not line.startswith("From "):
continue
count = count + 1
senderNames = line.split()
print(senderNames[1])
name = senderNames[1]
if name not in mailSender:
mailSender[name] = 1
else:
mailSender[name] = mailSender[name] + 1
答案 1 :(得分:0)
字典有两部分,keys
和values
。每个key
指向一个value
,其执行方式如下:
mailSender["email@email.com"] = 5 # This means, that email@email.com appears 5 times
当您尝试查找发件人的姓名时,您需要在keys
中搜索存储所有电子邮件的名称,而不是整个字典,这是{{1到keys
。您还需要在values
中指明要查找的电子邮件地址的位置,这是电子邮件列表中的一个。您可以通过将代码更改为:
senderNames
例如,您可以参考找到第一个电子邮件地址:
if senderNames[*index of name*] not in mailSender.keys():
mailSender[senderNames] = 1
else:
mailSender[senderNames] = mailSender[senderNames] + 1
然后,它会在if senderNames[0] not in mailSender.keys():
mailSender[senderNames] = 1
else:
mailSender[senderNames] = mailSender[senderNames] + 1
的键中搜索senderNames
是否在mailSender
。希望这有帮助!