试着理解字典

2024-10-01 19:28:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我在玩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'

我没有经验知道我的错误在哪里,我希望有人能给我一些启示


Tags: 代码nameinif字典电子邮件count错误
2条回答

字典有两部分,keysvalues。每个key指向一个value,如下所示:

mailSender["email@email.com"] = 5 # This means, that email@email.com appears 5 times

当您试图查找发件人的姓名时,需要在存储所有电子邮件的keys中搜索姓名,而不是在整个字典中搜索姓名,这是keysvalues的映射。您还需要指出您希望在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的键中。希望这有帮助

问题是您使用的是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

相关问题 更多 >

    热门问题