试图理解字典
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
字典有两部分,keys
和values
。每个 key
,指向一个 value
,这样做是这样的:
mailSender["email@email.com"] = 5 # This means, that email@email.com appears 5 times
当您尝试查找发件人的姓名时,您需要在存储所有电子邮件的 keys
中搜索姓名,而不是整个字典,它是 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
的键中。希望这对您有所帮助!
我正在玩 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
字典有两部分,keys
和values
。每个 key
,指向一个 value
,这样做是这样的:
mailSender["email@email.com"] = 5 # This means, that email@email.com appears 5 times
当您尝试查找发件人的姓名时,您需要在存储所有电子邮件的 keys
中搜索姓名,而不是整个字典,它是 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
的键中。希望这对您有所帮助!