唯一键和Python字典

唯一键和Python字典,python,Python,以下是相关功能的代码: def populateSubscribers(csvfile, db): conn = sqlite3.connect(db) conn.text_factory = str #bugger 8-bit bytestrings cur = conn.cursor() subscriber_dict = {} # read values from tab-delimited csv file reader = csv.reader(open(

以下是相关功能的代码:

def populateSubscribers(csvfile, db):
  conn = sqlite3.connect(db)
  conn.text_factory = str  #bugger 8-bit bytestrings
  cur = conn.cursor()

  subscriber_dict = {}

  # read values from tab-delimited csv file
  reader = csv.reader(open(csvfile, "rU"), delimiter = '\t')
  for Number, Name, Message, Datetime, Type in reader:
    if str(Number)[:1] == '1':
      tmpNumber = str(Number)[1:]
      Number = int(tmpNumber)

      # check to ensure name/number not null
      if Number and Name:
        # add unique subscribers to dictionary
        subscriber_dict[Number] = Name
      else:
        print 'Subscriber missing name or number'

  # insert unique subscribers into subscriber table
  for number, name in subscriber_dict.items():
    cur.execute('INSERT OR IGNORE INTO subscriber (name, phone_number) VALUES (?,?)', (name, number))
    conn.commit()

  cur.close()
  conn.close()
  print '...Successfully populated subcriber table.'

它从csv文件中读取订户名称和电话号码,然后将每个唯一订户的条目写入数据库。我希望电话号码是键/值对中的键,因为它是唯一的。但出于某种原因,它并没有从数据中读取所有的数字,它缺少了一些订户。如果我把名字作为钥匙,它会像预期的那样丢失(消除所有未知的重复),但是作为钥匙的电话号码会丢失一些号码。如果str(Number)[:1]='1':可能正在过滤掉您的一些数据,那么在我看来,您对如何修复逻辑有什么想法吗

添加一个else并打印出它拒绝的任何内容。这些可能是出问题的地方


无论哪种方式,都要减少输入数据,找出哪些数据没有被使用。如果看不到数据和您所说的有效的替代方案,就很难确定确切的原因。

您确定电话号码是唯一的吗?您确定电话号码的格式总是很好的,以“1”字符开头(而不是说空白)?第二条if语句的缩进是错误的。arg…最初该行是
if str(Number)[0]=='1':
,但我得到了一个
索引器:字符串索引超出范围的错误。有人建议我将其更改为上面显示的内容以解决此问题。这一行似乎是问题所在。我创建了一个else,它正在查找一条空白记录(最后一行),但仍然缺少两个数字。它错过的电话号码只有3-4位,而且越来越长。但是没有任何东西可以阻止它变短。。。。