传递两个函数来映射

时间:2014-08-13 21:35:12

标签: python map

我正在尝试在map

中传递两个函数和一个可迭代对象
test_code = map(get_repo_info, repo_page)

def get_repo_info(data):
  print data['id'], data['full_name']

def repo_page():
   ...some code....
   returns a list of dictionaries that I map over in the map function

def write_to_csv():
   csv_open = open('test.csv', 'wb')
   csv_writer = csv.writer(csv_open)
   return csv_writer

get_repo_info()函数中,我想将所有内容写入csv文件。我想将每行写入csv行

,而不是打印出每一行

我希望它看起来像这样

def get_repo_info(data, csv_writer):
  csv_writer.writerow([data['id'], data['full_name']])

map函数看起来像这样

map(get_repo_info, repo_page())

但是,我无法弄清楚如何在get_repo_info()函数中传递csv_writer map的第二个参数,因为map使用的函数只能通过一次一个论点,而不是两个。

2 个答案:

答案 0 :(得分:0)

def get_repo_info(data):
  print data['id'], data['full_name']

def repo_page():
   return [{"id":"bar","full_name":"foobar"}]


test_code = map(get_repo_info, repo_page()) # call the method
bar foobar

您可以在write_to_csv中调用地图:

def get_repo_info():
    map(write_to_csv,[[[data['id'], data['full_name']] for data in repo_page()]])

def repo_page():
    return [{"id": "bar", "full_name": "foobar"}, {"id": "bar1", "full_name": "foobar1"}]

def write_to_csv(data):
    csv_open = open('test.csv', 'wb')
    csv_writer = csv.writer(csv_open)
    csv_writer.writerows(data)
get_repo_info()

这写道:

 bar,foobar
 bar1,foobar1

到您的csv文件。

但是使用for循环可以实现相同的目的:

def write_to_csv(data):
   csv_open = open('test.csv', 'wb')
   csv_writer = csv.writer(csv_open)
   csv_writer.writerows([[data['id'], data['full_name']] for data in repo_page()])

答案 1 :(得分:0)

我把它分解成一个单独的函数

test_code = map(get_repo_info, repo_page)

def get_repo_info(data):
  return (data['id'], data['full_name'])

def repo_page():
   ...some code....
   returns a list of dictionaries that I map over in the map function

def write_to_csv():
   csv_open = open('test.csv', 'wb')
   csv_writer = csv.writer(csv_open)
   return csv_writer

some_info = get_repo_info(data)
csv_writing = write_to_csv()
csv_writing.writerow(some_info)