【问题标题】:Search a value in a nested list在嵌套列表中搜索值
【发布时间】:2018-10-15 08:34:10
【问题描述】:

我有一个数据库文件,csv 文件。我想在这个列表中搜索一个名字。要知道它是否存在。如果不显示要添加的选项。名称旁边的数字是客户编号。如何在此列表中搜索值?

lines=[]
user_name=input("PLEASE ENTER YOUR FIRST AND LAST NAME: ")
with open("data_base.csv", "r") as in_file:
    for line in in_file:
        row = line.split(",")
        for i in range(1, len(row)):
            row[i] =eval(row[i])
            lines.append(row)

如果我打印列表,结果是下一个:

[['Mariana Ortigoza', 1], ['James Butt', 2], ['Josephine Darakjy', 3], ['Art Venere', 4], ['Lenna Paprocki', 5], ['Donette Foller', 6], ['Simona Morasca', 7], ['Mitsue Tollner', 8], ['Leota Dilliard', 9], ['Sage Wieser', 10]]

【问题讨论】:

  • 我建议将数据保存到字典中,名称为键,数字为值。这样搜索效率更高。
  • 顺便说一句,使用eval 来转换这样的数据是一个的想法,而且完全没有必要。如果evaluated 可以格式化您的HD 等,恶意人员可以将命令放入CSV 中。
  • 你能发布一个示例 csv 文件吗?

标签: python python-3.x list nested


【解决方案1】:

一种方法是使用operator.itemgetter 提取每个子列表的第一个元素。

然后测试输入的名字是否在set的名字中;如果没有,则附加到lines

from operator import itemgetter

lines = [['Mariana Ortigoza', 1], ['James Butt', 2], ['Josephine Darakjy', 3],
         ['Art Venere', 4], ['Lenna Paprocki', 5], ['Donette Foller', 6],
         ['Simona Morasca', 7], ['Mitsue Tollner', 8], ['Leota Dilliard', 9],
         ['Sage Wieser', 10]]

user_name = input("PLEASE ENTER YOUR FIRST AND LAST NAME: ")

if user_name not in set(map(itemgetter(0), lines)):
    lines.append([user_name, len(lines)+1])

【讨论】:

  • 我会做类似的事情,除了使用csv.reader (我认为名称用引号引起来)并将名称大写以进行不区分大小写的比较。类似set(row[0].upper() for row in csv.reader(open('data_base.csv', newline='')))
猜你喜欢
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多