试图理解字典

Trying to understand dictionaries

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

我没有经验可以看出我哪里出错了,我希望有人能对此有所启发。

问题是您使用的是 senderNames,这是一个包含发件人等等的列表,而您可能正在寻找 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

字典有两部分,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 的键中。希望这对您有所帮助!