python遍历字典以查看是否存在值

2024-04-26 06:19:39 发布

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

我试着在python字典中循环,看看我从csv文件中获得的值是否已经存在于字典中,如果这些值不存在,我想将它们添加到字典中。然后将其附加到列表中。在

我得到的错误列表索引必须是整数,而不是str

示例输入

名字姓氏

约翰·史密斯

约翰·史密斯

输出示例

姓约翰姓史密斯

用户列表=[]

with open(input_path,'rU') as csvfile:
        reader = csv.DictReader(csvfile)

for row in reader:

  if row['first_name'] not in user_dictionary['first_name'] and not in row['last_name'] not in user_dictionary['last_name']:
      user_dictionary = {

          'first_name':row['first_name'],
          'last_name':row['last_name']
            }
            user_list.append(user_dictionary)

Tags: 文件csvcsvfilenamein示例列表dictionary
3条回答

目前,您的代码正在为for循环的每次迭代创建一个新字典。如果字典的每个值都是一个列表,则可以通过以下键将其附加到该列表:

with open(input_path,'rU') as csvfile:
    reader = csv.DictReader(csvfile)
user_dictionary = {"first_name":["name1, "name2", ...], "last_name":["name3", name4", ....]}
for row in reader:
    if row['first_name'] not in user_dictionary['first_name'] and not in row['last_name'] not in user_dictionary['last_name']:
       user_dictionary["first_name"].append(row['first_name'])
       user_dictionary['last_name'].append(row['last_name'])

通常,您可以在^{}视图上使用成员资格测试(x in y)来检查字典中是否已经存在该值。在

但是,如果您试图将CSV文件中的所有唯一用户添加到用户列表中,则这与字典值测试无关,而与列表成员资格测试无关。在

您可以使用一个^{},它将包含添加到列表中的所有用户的“id”,并启用快速O(n)(摊销)时间检查,而不是每次迭代整个列表进行缓慢的成员资格检查:

with open(input_path,'rU') as csvfile:
    reader = csv.DictReader(csvfile)

user_list = []
user_set = set()
for row in reader:
    user_id = (row['first_name'], row['last_name'])
    if user_id not in user_set:
        user = {
            'first_name': row['first_name'],
            'last_name': row['last_name'],
            # something else ...
        }
        user_list.append(user)
        user_set.add(user_id)

错误"list indices must be integers, not str"使问题变得清楚:在抛出错误的行上,您有一个您认为是dict的列表,您尝试使用一个字符串作为它的键,然后砰!在

你没有提供足够的信息来猜测它是哪个词:它可能是user_dictionary,可能是你用的是{},而不是你说的{}。它甚至可能是其他的东西,你不知道你在代码中还遗漏了什么。但这是一个列表,你用的就像是一个口述

相关问题 更多 >