在Python字典中得到相似值的和

2024-09-21 05:56:59 发布

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

对不起,我又回来了。这一次,我试图得到每个停车场的登记号码,并添加了以下代码:

data_dict = {}
dict_list = []
def createNameDict(filename):
  path = "C:\Users\user\Desktop"
  basename = "ParkingData_Part2.txt"
  filename = path + "//" + basename
  file = open(filename)
  contents = file.read()
  print contents,"\n"


  data_list = [lines.split(",") for lines in contents.split("\n")]



  for line in data_list:
    regNumber = line[0]
    name = line[1]
    phoneExtn = line[2]
    carpark = line[3]
    details = (name,phoneExtn,carpark)

    data_dict[regNumber] = details
  print data_dict,"\n"
  print data_dict.items(),"\n"

def getDetails(regNumber):
  try:
    print data_dict[regNumber]
  except:
    print regNumber, " not in dictionary"
    return
def addRegistration(regNumber, details):
  if regNumber not in data_dict:
    data_dict[regNumber] = details

    print regNumber, ":", details, "Registration details added"
  else:
    print regNumber, "Key Already exist, \n"


  return data_dict
def registrationsPerCarpark(carpark):

  for regNumber, details in data_dict:        
    return [key for key, value in data_dict.iteritems() if value == details][0]
  #for carpark in data_dict.values():
   # print sum(int(carpark))
    #return

但是这些数值没有相加,因为它们不是数值。我已经在谷歌搜索了很多,但没有得到任何关于这方面的信息。我的代码输出是这样的:

^{pr2}$

Tags: 代码infordatareturndeflinecontents
3条回答
def registrationsPerCarpark(carpark):
    for regNumber, details in data_dict:        
        return [key for key, value in data_dict.iteritems() if value == details][0]

您的for循环将不起作用,因为迭代的in dictionary构造只返回key,而不是{}对。其次,您永远不会使用carpark变量。第三,它是无关的,因为你在返回语句中循环使用它,尽管你对它的使用没有意义。有人可以假设你只需要数一数某个停车场有多少辆车?在

for regNumber, details in data_dict行是错误的,您不能用这种方式迭代dict。您可能是指for regNumber, details in data_dict.items()(或iteritems(),但这将是python2特有的)。在

如果我对任务理解正确,那么函数体应该看起来像下面这样:

def registrationsPerCarpark(carpark):

    return sum(value[2]=carpark for value in data_dict.values())

注意值中的空格:例如,您应该查找' AgHort_Parking',而不是{}。要解决这个问题,请将createNameDict改为do

^{pr2}$

等等。 另外,createNameDict内存效率低下,因为它一次将文件内容加载到内存中。要减少内存使用,请执行以下操作:

^{3}$

这是另一种更紧凑的方法。在

import csv
from collections import defaultdict

rows = defaultdict(set)

with open('in.csv') as f:
  lines = csv.reader(f)
  for line in lines:
      rows[line[3].strip()].add((line[0],line[1],line[2]))

for key in rows:
   print 'Total number of cars for %s is %s' % (key,len(rows[key]))

其结果是:

^{pr2}$

相关问题 更多 >

    热门问题